subos-frontend 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LIBRARY_USAGE.md +162 -0
- package/README.md +396 -0
- package/dist/index.js +2289 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2220 -0
- package/dist/index.mjs.map +1 -0
- package/dist/style.css +1684 -0
- package/dist/types/App.d.ts +2 -0
- package/dist/types/App.d.ts.map +1 -0
- package/dist/types/api/client.d.ts +49 -0
- package/dist/types/api/client.d.ts.map +1 -0
- package/dist/types/api/config.d.ts +16 -0
- package/dist/types/api/config.d.ts.map +1 -0
- package/dist/types/components/LogoInline.d.ts +8 -0
- package/dist/types/components/LogoInline.d.ts.map +1 -0
- package/dist/types/components/common/Layout.d.ts +7 -0
- package/dist/types/components/common/Layout.d.ts.map +1 -0
- package/dist/types/components/email/EmailEntry.d.ts +10 -0
- package/dist/types/components/email/EmailEntry.d.ts.map +1 -0
- package/dist/types/components/email/index.d.ts +3 -0
- package/dist/types/components/email/index.d.ts.map +1 -0
- package/dist/types/components/icons/CheckIcon.d.ts +6 -0
- package/dist/types/components/icons/CheckIcon.d.ts.map +1 -0
- package/dist/types/components/icons/CommonIcons.d.ts +21 -0
- package/dist/types/components/icons/CommonIcons.d.ts.map +1 -0
- package/dist/types/components/pagination/Pagination.d.ts +12 -0
- package/dist/types/components/pagination/Pagination.d.ts.map +1 -0
- package/dist/types/components/pagination/index.d.ts +3 -0
- package/dist/types/components/pagination/index.d.ts.map +1 -0
- package/dist/types/components/payments/ChangeCardButton.d.ts +10 -0
- package/dist/types/components/payments/ChangeCardButton.d.ts.map +1 -0
- package/dist/types/components/payments/PaymentCancelView.d.ts +8 -0
- package/dist/types/components/payments/PaymentCancelView.d.ts.map +1 -0
- package/dist/types/components/payments/PaymentSuccessView.d.ts +8 -0
- package/dist/types/components/payments/PaymentSuccessView.d.ts.map +1 -0
- package/dist/types/components/payments/index.d.ts +5 -0
- package/dist/types/components/payments/index.d.ts.map +1 -0
- package/dist/types/components/plans/BillingCycleToggle.d.ts +7 -0
- package/dist/types/components/plans/BillingCycleToggle.d.ts.map +1 -0
- package/dist/types/components/plans/PlanCard.d.ts +11 -0
- package/dist/types/components/plans/PlanCard.d.ts.map +1 -0
- package/dist/types/components/plans/PlanSelector.d.ts +19 -0
- package/dist/types/components/plans/PlanSelector.d.ts.map +1 -0
- package/dist/types/components/plans/PlansGrid.d.ts +13 -0
- package/dist/types/components/plans/PlansGrid.d.ts.map +1 -0
- package/dist/types/components/plans/TierFilterDropdown.d.ts +12 -0
- package/dist/types/components/plans/TierFilterDropdown.d.ts.map +1 -0
- package/dist/types/components/plans/index.d.ts +11 -0
- package/dist/types/components/plans/index.d.ts.map +1 -0
- package/dist/types/components/subscription/SubscriptionDetails.d.ts +11 -0
- package/dist/types/components/subscription/SubscriptionDetails.d.ts.map +1 -0
- package/dist/types/components/subscription/index.d.ts +3 -0
- package/dist/types/components/subscription/index.d.ts.map +1 -0
- package/dist/types/components/transaction/TransactionList.d.ts +11 -0
- package/dist/types/components/transaction/TransactionList.d.ts.map +1 -0
- package/dist/types/components/transaction/TransactionModal.d.ts +9 -0
- package/dist/types/components/transaction/TransactionModal.d.ts.map +1 -0
- package/dist/types/components/transaction/index.d.ts +5 -0
- package/dist/types/components/transaction/index.d.ts.map +1 -0
- package/dist/types/components/upgrade/UpgradeSummary.d.ts +8 -0
- package/dist/types/components/upgrade/UpgradeSummary.d.ts.map +1 -0
- package/dist/types/components/upgrade/index.d.ts +3 -0
- package/dist/types/components/upgrade/index.d.ts.map +1 -0
- package/dist/types/config/envConfig.d.ts +36 -0
- package/dist/types/config/envConfig.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +15 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/payments/usePaymentParams.d.ts +8 -0
- package/dist/types/hooks/payments/usePaymentParams.d.ts.map +1 -0
- package/dist/types/hooks/payments/useProcessPaymentCancel.d.ts +8 -0
- package/dist/types/hooks/payments/useProcessPaymentCancel.d.ts.map +1 -0
- package/dist/types/hooks/payments/useProcessPaymentSuccess.d.ts +8 -0
- package/dist/types/hooks/payments/useProcessPaymentSuccess.d.ts.map +1 -0
- package/dist/types/hooks/useCancelSubscription.d.ts +16 -0
- package/dist/types/hooks/useCancelSubscription.d.ts.map +1 -0
- package/dist/types/hooks/useCustomerPortal.d.ts +12 -0
- package/dist/types/hooks/useCustomerPortal.d.ts.map +1 -0
- package/dist/types/hooks/useEmailManagement.d.ts +13 -0
- package/dist/types/hooks/useEmailManagement.d.ts.map +1 -0
- package/dist/types/hooks/usePagination.d.ts +20 -0
- package/dist/types/hooks/usePagination.d.ts.map +1 -0
- package/dist/types/hooks/usePlans.d.ts +22 -0
- package/dist/types/hooks/usePlans.d.ts.map +1 -0
- package/dist/types/hooks/useSubscription.d.ts +10 -0
- package/dist/types/hooks/useSubscription.d.ts.map +1 -0
- package/dist/types/hooks/useTransactions.d.ts +26 -0
- package/dist/types/hooks/useTransactions.d.ts.map +1 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/pages/DashboardPage.d.ts +3 -0
- package/dist/types/pages/DashboardPage.d.ts.map +1 -0
- package/dist/types/pages/PaymentCancelPage.d.ts +4 -0
- package/dist/types/pages/PaymentCancelPage.d.ts.map +1 -0
- package/dist/types/pages/PaymentSuccessPage.d.ts +4 -0
- package/dist/types/pages/PaymentSuccessPage.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +117 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/planUtils.d.ts +47 -0
- package/dist/types/utils/planUtils.d.ts.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/envConfig.ts","../src/api/config.ts","../src/api/client.ts","../src/hooks/useEmailManagement.ts","../src/hooks/useSubscription.ts","../src/utils/planUtils.ts","../src/hooks/usePlans.ts","../src/hooks/useTransactions.ts","../src/hooks/usePagination.ts","../src/hooks/useCancelSubscription.ts","../src/hooks/useCustomerPortal.ts","../src/components/plans/BillingCycleToggle.tsx","../src/components/plans/TierFilterDropdown.tsx","../src/components/icons/CheckIcon.tsx","../src/components/plans/PlanCard.tsx","../src/components/icons/CommonIcons.tsx","../src/components/plans/PlansGrid.tsx","../src/components/plans/PlanSelector.tsx","../src/components/payments/ChangeCardButton.tsx","../src/components/payments/PaymentCancelView.tsx","../src/components/payments/PaymentSuccessView.tsx","../src/components/transaction/TransactionList.tsx","../src/components/pagination/Pagination.tsx","../src/components/transaction/TransactionModal.tsx","../src/components/subscription/SubscriptionDetails.tsx","../src/components/email/EmailEntry.tsx","../src/components/upgrade/UpgradeSummary.tsx","../src/components/LogoInline.tsx","../src/components/common/Layout.tsx","../src/pages/DashboardPage.tsx","../src/hooks/payments/usePaymentParams.ts","../src/hooks/payments/useProcessPaymentSuccess.ts","../src/pages/PaymentSuccessPage.tsx","../src/hooks/payments/useProcessPaymentCancel.ts","../src/pages/PaymentCancelPage.tsx","../src/App.tsx"],"names":["useState","useEffect","useCallback","error","useRef","apiRequest","jsxs","jsx","Fragment","React","RouterLink","useMemo","App","Router","Routes","Route","Navigate"],"mappings":"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","file":"index.js","sourcesContent":["// Environment configuration with runtime overrides\n// Centralized config that can be set by the consumer project at runtime\n\ntype EnvDefaults = {\n API_ENDPOINT: string;\n NEXT_PUBLIC_API_END_POINT: string;\n PROJECT_ID: string;\n STRIPE_PUBLISHABLE_KEY: string;\n APP_NAME: string;\n APP_VERSION: string;\n APP_ENVIRONMENT: string;\n DEBUG: boolean;\n MODE: string;\n DEV: boolean;\n PROD: boolean;\n};\n\n// Safe environment access that works in both Vite and other bundlers\n// Overloads ensure callers get a correctly typed value when a fallback is provided\nfunction getEnvVar(key: string, fallback: string): string;\nfunction getEnvVar(key: string, fallback: boolean): boolean;\nfunction getEnvVar(key: string): string | boolean | undefined;\nfunction getEnvVar(\n key: string,\n fallback?: string | boolean\n): string | boolean | undefined {\n try {\n // Check Vite environment first\n if (\n typeof import.meta !== 'undefined' &&\n (import.meta as unknown as { env?: Record<string, string | boolean | undefined> }).env\n ) {\n const v = (import.meta as unknown as { env?: Record<string, string | boolean | undefined> }).env![key] as\n | string\n | boolean\n | undefined;\n if (typeof fallback === 'boolean') {\n if (typeof v === 'boolean') return v;\n if (typeof v === 'string') return ['true', '1', 'yes'].includes(v.toLowerCase());\n return fallback;\n }\n if (typeof fallback === 'string') {\n if (typeof v === 'string') return v;\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n return fallback;\n }\n return v;\n }\n\n // Fallback for Node.js / other environments\n const nodeEnv = (typeof globalThis !== 'undefined' && (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env) as\n | Record<string, string | undefined>\n | undefined;\n if (nodeEnv) {\n const v = nodeEnv[key];\n if (typeof fallback === 'boolean') {\n if (typeof v === 'string') return ['true', '1', 'yes'].includes(v.toLowerCase());\n return fallback;\n }\n if (typeof fallback === 'string') {\n return v ?? fallback;\n }\n return v;\n }\n\n return fallback;\n } catch {\n return fallback;\n }\n}\n\n\nconst envDefaults: EnvDefaults = {\n // API Configuration - These MUST be configured by the consuming app\n API_ENDPOINT: getEnvVar('VITE_API_ENDPOINT', ''),\n NEXT_PUBLIC_API_END_POINT: getEnvVar('VITE_NEXT_PUBLIC_API_END_POINT', ''),\n // Project configuration for backend header - This MUST be configured by the consuming app\n PROJECT_ID: getEnvVar('VITE_PROJECT_ID', ''),\n // Third-party keys - This MUST be configured by the consuming app\n STRIPE_PUBLISHABLE_KEY: getEnvVar('VITE_STRIPE_PUBLISHABLE_KEY', ''),\n // App Configuration\n APP_NAME: getEnvVar('VITE_APP_NAME', 'SubOS Frontend'),\n APP_VERSION: getEnvVar('VITE_APP_VERSION', '1.0.0'),\n APP_ENVIRONMENT: getEnvVar('VITE_APP_ENVIRONMENT', 'development'),\n // Development Configuration\n DEBUG: getEnvVar('VITE_DEBUG', false),\n // Mode\n MODE: getEnvVar('MODE', 'development'),\n DEV: getEnvVar('DEV', false),\n PROD: getEnvVar('PROD', false),\n};\n\nconst runtimeOverrides: Partial<EnvDefaults> = {};\n\nexport type EnvConfig = EnvDefaults;\n\nexport type ConfigureSubOSInput = Partial<{\n apiEndpoint: string;\n projectId: string;\n stripePublishableKey: string;\n appName: string;\n appVersion: string;\n appEnvironment: string;\n debug: boolean;\n}>;\n\n// Call from consumer app to override defaults at runtime\nexport function configureSubOS(input: ConfigureSubOSInput = {}): void {\n if (input.apiEndpoint !== undefined) runtimeOverrides.API_ENDPOINT = input.apiEndpoint;\n if (input.projectId !== undefined) runtimeOverrides.PROJECT_ID = input.projectId;\n if (input.stripePublishableKey !== undefined) runtimeOverrides.STRIPE_PUBLISHABLE_KEY = input.stripePublishableKey;\n if (input.appName !== undefined) runtimeOverrides.APP_NAME = input.appName;\n if (input.appVersion !== undefined) runtimeOverrides.APP_VERSION = input.appVersion;\n if (input.appEnvironment !== undefined) runtimeOverrides.APP_ENVIRONMENT = input.appEnvironment;\n if (input.debug !== undefined) runtimeOverrides.DEBUG = input.debug;\n}\n\n// Validation function to ensure required config is set\nexport function validateSubOSConfig(): { isValid: boolean; missingFields: string[] } {\n const missingFields: string[] = [];\n \n if (!getApiBaseUrl()) missingFields.push('apiEndpoint');\n if (!getProjectId()) missingFields.push('projectId');\n if (!getStripePublishableKey()) missingFields.push('stripePublishableKey');\n \n return {\n isValid: missingFields.length === 0,\n missingFields\n };\n}\n\n// Helper to throw error if config is invalid\nexport function ensureSubOSConfig(): void {\n const validation = validateSubOSConfig();\n if (!validation.isValid) {\n throw new Error(\n `SubOS configuration is incomplete. Missing required fields: ${validation.missingFields.join(', ')}. ` +\n 'Please call configureSubOS() with the required configuration before using SubOS components.'\n );\n }\n}\n\n// Resolved config getters (runtime override wins over env defaults)\nexport const getApiBaseUrl = (): string => runtimeOverrides.API_ENDPOINT ?? envDefaults.API_ENDPOINT;\nexport const getProjectId = (): string => runtimeOverrides.PROJECT_ID ?? envDefaults.PROJECT_ID;\nexport const getStripePublishableKey = (): string => runtimeOverrides.STRIPE_PUBLISHABLE_KEY ?? envDefaults.STRIPE_PUBLISHABLE_KEY;\n\nexport const isDevelopment = (): boolean => {\n const env = runtimeOverrides.APP_ENVIRONMENT ?? envDefaults.APP_ENVIRONMENT;\n const devFlag = runtimeOverrides.DEV ?? envDefaults.DEV;\n return env === 'development' || !!devFlag;\n};\n\nexport const isProduction = (): boolean => {\n const env = runtimeOverrides.APP_ENVIRONMENT ?? envDefaults.APP_ENVIRONMENT;\n const prodFlag = runtimeOverrides.PROD ?? envDefaults.PROD;\n return env === 'production' || !!prodFlag;\n};\n","import { getApiBaseUrl, getProjectId } from '../config/envConfig.js';\n// API configuration (use getter so runtime overrides apply)\nexport { getApiBaseUrl };\n\n// Common headers for API requests\nexport const getHeaders = () => {\n return {\n 'Content-Type': 'application/json',\n 'auth': 'auth', // Adding auth header with value 'auth' for all API requests\n 'projectId': getProjectId(),\n };\n};\n\n// API endpoints\nexport const ENDPOINTS = {\n PLANS: '/plans',\n PAYMENTS: '/api/payments',\n CHECKOUT: '/checkout',\n SUBSCRIPTION: '/subscription',\n CUSTOMER: '/customer',\n TRANSACTIONS: '/transaction'\n};\n","import { getApiBaseUrl, getHeaders, ENDPOINTS } from './config';\nimport type { ApiResponse, Plan, CheckoutDetails } from '../types';\n\n// Generic API request handler\nasync function apiRequest<T>(\n endpoint: string, \n method: string = 'GET', \n data?: unknown\n): Promise<ApiResponse<T>> {\n try {\n const url = `${getApiBaseUrl()}${endpoint}`;\n const options: RequestInit = {\n method,\n headers: getHeaders(),\n credentials: 'include',\n };\n\n if (data) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n const result = await response.json();\n\n if (!response.ok) {\n return { success: false, error: result.message || 'An error occurred' };\n }\n\n return { success: true, data: result };\n } catch (error) {\n console.error('API request failed:', error);\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n}\n\n// All requests below call backend REST endpoints directly (no SDK)\n\n// Plan API functions\nexport const plansApi = {\n getPlans: async (): Promise<ApiResponse<Plan[]>> => {\n return apiRequest<Plan[]>(`${ENDPOINTS.PLANS}`);\n },\n getPlanByCode: (code: string, externalId: string, queryParams?: { paymentMethodId?: string | null; couponCode?: string | null }) => {\n const params = new URLSearchParams({ planCode: code, externalId });\n if (queryParams?.paymentMethodId) params.append('paymentMethodId', queryParams.paymentMethodId);\n if (queryParams?.couponCode) params.append('couponCode', queryParams.couponCode);\n return apiRequest<Plan>(`${ENDPOINTS.PLANS}?${params.toString()}`);\n },\n \n // Create unified checkout session and get hosted checkout URL\n createPaymentSession: async (\n planCode: string,\n options?: { amount?: number; currency?: string; customerEmail?: string; couponCode?: string }\n ): Promise<ApiResponse<{ checkoutUrl: string; gateway: string; sessionId?: string; paymentId?: string }>> => {\n const customerEmail = options?.customerEmail || localStorage.getItem('userEmail') || undefined;\n const currency = options?.currency || 'USD';\n const amount = options?.amount; // if not provided, backend will compute from plan\n\n const payload: any = {\n planCode,\n currency,\n returnUrl: `${window.location.origin}/payment-success`,\n cancelUrl: `${window.location.origin}/payment-cancel`,\n };\n\n if (customerEmail) payload.customerEmail = customerEmail;\n if (options?.couponCode) payload.couponCode = options.couponCode;\n if (typeof amount === 'number' && amount > 0) payload.amount = amount;\n\n const resp = await apiRequest<any>(\n `${ENDPOINTS.PAYMENTS}/checkout`,\n 'POST',\n payload\n );\n\n // Backend returns { success: boolean, data: { checkoutUrl, ... } }\n // Our apiRequest wraps this again as { success: true, data: <backendResponse> }\n if (resp.success && resp.data && typeof resp.data === 'object' && 'data' in resp.data) {\n return { success: true, data: (resp.data as any).data };\n }\n return resp as ApiResponse<{ checkoutUrl: string; gateway: string; sessionId?: string; paymentId?: string }>;\n },\n};\n\n// Checkout API functions\nexport const checkoutApi = {\n getCheckoutDetails: (planCode: string, queryParams?: { externalId?: string | null; paymentMethodId?: string | null; couponCode?: string | null }) => {\n const params = new URLSearchParams({ planCode });\n if (queryParams?.externalId) params.append('externalId', queryParams.externalId);\n if (queryParams?.paymentMethodId) params.append('paymentMethodId', queryParams.paymentMethodId);\n if (queryParams?.couponCode) params.append('couponCode', queryParams.couponCode);\n return apiRequest<CheckoutDetails>(`${ENDPOINTS.CHECKOUT}?${params.toString()}`);\n }\n};\n\n// Subscription API functions (via SDK)\nexport const subscriptionApi = {\n getActiveSubscription: async (externalId: string): Promise<ApiResponse<any>> => {\n return apiRequest<any>(`${ENDPOINTS.SUBSCRIPTION}/${externalId}`);\n },\n cancelSubscription: async (\n externalId: string, \n options?: { \n cancellationMode?: string; \n cancellationReason?: string; \n }\n ): Promise<ApiResponse<any>> => {\n let endpoint = `${ENDPOINTS.SUBSCRIPTION}/${externalId}`;\n \n if (options) {\n const params = new URLSearchParams();\n if (options.cancellationMode) params.append('cancellationMode', options.cancellationMode);\n if (options.cancellationReason) params.append('cancellationReason', options.cancellationReason);\n \n if (params.toString()) {\n endpoint += `?${params.toString()}`;\n }\n }\n \n return apiRequest<any>(endpoint, 'DELETE');\n },\n};\n\n// Customer API functions (partially via SDK)\nexport const customerApi = {\n getCustomer: (externalId: string): Promise<ApiResponse<any>> =>\n apiRequest<any>(`${ENDPOINTS.CUSTOMER}/${externalId}`),\n};\n\n// Transaction API functions\nexport const transactionApi = {\n getTransactions: (externalId: string, filters?: { startDate?: string; endDate?: string; status?: string; page?: number; limit?: number }) => {\n // Using the endpoint from transaction.controller.ts: GET /:externalId/history\n let endpoint = `${ENDPOINTS.TRANSACTIONS}/${externalId}/history`;\n \n if (filters) {\n const params = new URLSearchParams();\n if (filters.startDate) params.append('startDate', filters.startDate);\n if (filters.endDate) params.append('endDate', filters.endDate);\n if (filters.status) params.append('status', filters.status);\n if (filters.page) params.append('page', filters.page.toString());\n if (filters.limit) params.append('limit', filters.limit.toString());\n \n if (params.toString()) {\n endpoint += `?${params.toString()}`;\n }\n }\n \n return apiRequest<any>(endpoint);\n },\n \n getInvoice: (transactionId: string) =>\n apiRequest<{ invoiceUrl: string }>(`${ENDPOINTS.TRANSACTIONS}/${transactionId}/invoice`),\n};\n","import { useState, useEffect } from 'react';\n\nexport interface UseEmailManagementReturn {\n email: string;\n setEmail: (email: string) => void;\n emailError: string | null;\n setEmailError: (error: string | null) => void;\n isEmailScreen: boolean;\n setIsEmailScreen: (isScreen: boolean) => void;\n handleEmailSubmit: () => void;\n handleChangeEmail: () => void;\n validateEmail: (email: string) => boolean;\n}\n\nexport const useEmailManagement = (\n onEmailValidated?: (email: string) => void\n): UseEmailManagementReturn => {\n const [email, setEmail] = useState<string>(localStorage.getItem('userEmail') || '');\n const [emailError, setEmailError] = useState<string | null>(null);\n const [isEmailScreen, setIsEmailScreen] = useState<boolean>(!localStorage.getItem('userEmail'));\n\n const validateEmail = (emailValue: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(emailValue);\n };\n\n // Validate email on component mount\n useEffect(() => {\n if (email) {\n if (!validateEmail(email)) {\n setEmailError('Please enter a valid email address');\n } else {\n onEmailValidated?.(email);\n }\n }\n }, []);\n\n const handleEmailSubmit = () => {\n if (!validateEmail(email)) {\n setEmailError('Please enter a valid email address');\n return;\n }\n\n localStorage.setItem('userEmail', email);\n setIsEmailScreen(false);\n onEmailValidated?.(email);\n };\n\n const handleChangeEmail = () => {\n localStorage.removeItem('userEmail');\n setEmail('');\n setIsEmailScreen(true);\n setEmailError(null);\n };\n\n return {\n email,\n setEmail,\n emailError,\n setEmailError,\n isEmailScreen,\n setIsEmailScreen,\n handleEmailSubmit,\n handleChangeEmail,\n validateEmail,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { subscriptionApi } from '../api/client';\nimport type { Subscription } from '../types';\n\nexport interface UseSubscriptionReturn {\n subscription: Subscription | null;\n loading: boolean;\n error: string | null;\n fetchSubscription: (email: string) => Promise<void>;\n clearSubscription: () => void;\n}\n\nexport const useSubscription = (): UseSubscriptionReturn => {\n const [subscription, setSubscription] = useState<Subscription | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchSubscription = useCallback(async (email: string) => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await subscriptionApi.getActiveSubscription(email);\n if (response.success && response.data) {\n setSubscription(response.data);\n } else {\n setError(response.error || 'Failed to load subscription information');\n }\n } catch (err) {\n console.error('Error fetching subscription:', err);\n setError('Failed to load subscription information. Please try again later.');\n } finally {\n setLoading(false);\n }\n }, []);\n\n const clearSubscription = useCallback(() => {\n setSubscription(null);\n setError(null);\n }, []);\n\n return {\n subscription,\n loading,\n error,\n fetchSubscription,\n clearSubscription,\n };\n};\n","import type { Plan } from '../types';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n candidates: number;\n}\n\n/**\n * Get plan features for display based on plan name\n */\nexport const getPlanFeatures = (plan: Plan): string[] => {\n const planName = plan.name.toLowerCase();\n \n // Define features based on plan type\n if (planName.includes('starter')) {\n return [\n 'Import/Export User',\n 'Active Jobs',\n 'Text Change Module',\n 'Employers Auto Approval',\n 'Create Page in Manage Portal',\n 'Multi Select Master with action button'\n ];\n } else if (planName.includes('growth')) {\n return [\n 'Resume Builder',\n 'Custom Email Body',\n 'View Candidate Resume',\n 'Advanced Analytics',\n 'Priority Support',\n 'Custom Branding'\n ];\n } else if (planName.includes('scale')) {\n return [\n 'AI-Powered Matching',\n 'Advanced Reporting',\n 'API Access',\n 'White-label Solution',\n 'Dedicated Account Manager',\n 'Custom Integrations'\n ];\n }\n \n // Fallback to billable metrics if available\n const features: string[] = [];\n if (plan.charges && plan.charges.length > 0) {\n plan.charges.forEach(charge => {\n if (charge.billableMetric?.name) {\n features.push(charge.billableMetric.name);\n }\n });\n }\n return features.length > 0 ? features : ['Core features included'];\n};\n\n/**\n * Get candidate units from plan's billable metrics (numeric only)\n */\nexport const getCandidateUnits = (plan: Plan): number => {\n if (plan.charges && plan.charges.length > 0) {\n const candidateCharge = plan.charges.find(\n (charge) => charge.billableMetric && charge.billableMetric.code === 'CANDIDATES'\n );\n\n const units = candidateCharge?.properties?.units;\n if (typeof units === 'number' && Number.isFinite(units)) {\n return units;\n }\n }\n return 0;\n};\n\n/**\n * Get unique candidate units from all plans (numeric only)\n */\nexport const getUniqueCandidateUnits = (plans: Plan[]): number[] => {\n const unitsSet = new Set<number>();\n\n plans.forEach((plan) => {\n plan.charges.forEach((charge) => {\n if (charge.billableMetric?.code === 'CANDIDATES') {\n const units = charge.properties?.units;\n if (typeof units === 'number' && Number.isFinite(units)) {\n unitsSet.add(units);\n }\n }\n });\n });\n\n return Array.from(unitsSet).sort((a, b) => a - b); // Sort in ascending order\n};\n\n/**\n * Get dropdown options with unique candidate units\n */\nexport const getDropdownOptions = (plans: Plan[]): DropdownOption[] => {\n const options: DropdownOption[] = [];\n const uniqueUnits = getUniqueCandidateUnits(plans);\n \n // Add options for each unique candidate unit value\n uniqueUnits.forEach(units => {\n options.push({\n value: units.toString(),\n label: `Up to ${units.toLocaleString()} Candidates`,\n candidates: units\n });\n });\n \n return options;\n};\n\n/**\n * Get current selection display text\n */\nexport const getCurrentSelectionText = (tierFilter: string, plans: Plan[]): string => {\n const options = getDropdownOptions(plans);\n const currentOption = options.find(option => option.value === tierFilter);\n \n if (!currentOption) {\n // If no option found, check if tierFilter is a number (candidate units)\n const units = parseInt(tierFilter);\n if (!isNaN(units)) {\n return `Up to ${units.toLocaleString()} Candidates`;\n }\n // Fallback to the lowest candidates label if available, otherwise empty string\n return options.length > 0 ? options[0].label : '';\n }\n \n return currentOption.label;\n};\n\n/**\n * Filter plans based on billing cycle\n */\nexport const filterPlansByBillingCycle = (\n plans: Plan[], \n billingCycle: 'monthly' | 'yearly'\n): Plan[] => {\n return plans.filter((plan) => {\n const planInterval = plan.interval.toLowerCase();\n if (billingCycle === 'monthly') {\n return planInterval === 'month' || planInterval === 'monthly';\n } else {\n return planInterval === 'year' || planInterval === 'yearly';\n }\n });\n};\n\n/**\n * Filter plans based on candidate units\n */\nexport const filterPlansByTier = (plans: Plan[], tierFilter: string): Plan[] => {\n if (tierFilter === 'all') {\n return plans;\n }\n\n const targetUnits = parseInt(tierFilter);\n return plans.filter((plan) => {\n // Always include Starter plan regardless of tier filter\n const planNameLc = plan.name?.toLowerCase?.() || '';\n if (planNameLc.includes('starter')) return true;\n\n const planCandidateUnits = getCandidateUnits(plan);\n return planCandidateUnits === targetUnits;\n });\n};\n\n/**\n * Check if a plan is popular (typically Growth plan)\n */\nexport const isPlanPopular = (plan: Plan): boolean => {\n const planName = plan.name.toLowerCase();\n return planName.includes('growth');\n};\n\n/**\n * Get plan description based on plan name\n */\nexport const getPlanDescription = (plan: Plan): string => {\n const planName = plan.name.toLowerCase();\n \n if (planName.includes('starter') || planName.includes('basic')) {\n return 'Ideal for solopreneurs looking to start their niche job board journey.';\n } else if (planName.includes('growth') || planName.includes('pro')) {\n return 'Ideal for creators launching their job board with powerful features and built-in scalability.';\n } else {\n return 'Perfect for creators ready to run a full-scale, smart hiring engine with AI and advanced capabilities.';\n }\n};\n\n/**\n * Format date string\n */\nexport const formatDate = (dateString: string): string => {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n }).format(date);\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { plansApi } from '../api/client';\nimport type { Plan } from '../types';\nimport { \n filterPlansByBillingCycle, \n filterPlansByTier, \n getUniqueCandidateUnits,\n getDropdownOptions,\n getCurrentSelectionText,\n type DropdownOption\n} from '../utils/planUtils';\n\nexport interface UsePlansReturn {\n // Data\n plans: Plan[];\n filteredPlans: Plan[];\n selectedPlan: Plan | null;\n \n // Filters\n tierFilter: string;\n billingCycle: 'monthly' | 'yearly';\n \n // Loading and error states\n loading: boolean;\n error: string | null;\n \n // Actions\n fetchPlans: () => Promise<void>;\n setSelectedPlan: (plan: Plan | null) => void;\n setTierFilter: (filter: string) => void;\n setBillingCycle: (cycle: 'monthly' | 'yearly') => void;\n clearPlans: () => void;\n \n // Computed values\n dropdownOptions: DropdownOption[];\n currentSelectionText: string;\n \n // Plan operations\n handlePlanSelect: (plan: Plan) => void;\n handleUpgrade: (email: string) => Promise<void>;\n}\n\nexport const usePlans = (): UsePlansReturn => {\n // Core state\n const [plans, setPlans] = useState<Plan[]>([]);\n const [filteredPlans, setFilteredPlans] = useState<Plan[]>([]);\n const [selectedPlan, setSelectedPlan] = useState<Plan | null>(null);\n \n // Filter state\n const [tierFilter, setTierFilter] = useState<string>('all');\n const [billingCycle, setBillingCycle] = useState<'monthly' | 'yearly'>('monthly');\n \n // Loading and error state\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n // Fetch plans from API\n const fetchPlans = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await plansApi.getPlans();\n if (response.success && response.data) {\n const data = response.data;\n setPlans(data);\n setFilteredPlans(data);\n } else {\n setError(response.error || 'Failed to load plan information');\n }\n } catch (err) {\n console.error('Error fetching plans:', err);\n setError('Failed to load plan information. Please try again later.');\n } finally {\n setLoading(false);\n }\n }, []);\n\n // Set default tierFilter to lowest candidate unit when plans are loaded\n useEffect(() => {\n if (plans.length > 0 && tierFilter === 'all') {\n const uniqueUnits = getUniqueCandidateUnits(plans);\n if (uniqueUnits.length > 0) {\n setTierFilter(uniqueUnits[0].toString()); // Set to lowest value\n }\n }\n }, [plans, tierFilter]);\n\n // Filter plans based on candidate units and billing cycle\n useEffect(() => {\n let filtered = [...plans];\n\n // Filter by billing cycle (monthly/yearly)\n filtered = filterPlansByBillingCycle(filtered, billingCycle);\n\n // Filter by candidate units if not 'all'\n filtered = filterPlansByTier(filtered, tierFilter);\n\n setFilteredPlans(filtered);\n }, [plans, tierFilter, billingCycle]);\n\n // Handle plan selection\n const handlePlanSelect = useCallback((plan: Plan) => {\n setSelectedPlan(plan);\n }, []);\n\n // Handle upgrade button click\n const handleUpgrade = useCallback(async (email: string) => {\n if (!selectedPlan) return;\n\n try {\n const response = await plansApi.createPaymentSession(selectedPlan.code, {\n customerEmail: email || undefined,\n });\n if (response.success && response.data?.checkoutUrl) {\n window.location.href = response.data.checkoutUrl;\n } else {\n console.error('Failed to create payment session:', response.error);\n alert('Failed to initiate payment. Please try again.');\n }\n } catch (error) {\n console.error('Error creating payment session:', error);\n alert('An error occurred. Please try again.');\n }\n }, [selectedPlan]);\n\n // Clear plans data\n const clearPlans = useCallback(() => {\n setPlans([]);\n setFilteredPlans([]);\n setSelectedPlan(null);\n setError(null);\n setTierFilter('all');\n }, []);\n\n // Computed values\n const dropdownOptions = getDropdownOptions(plans);\n const currentSelectionText = getCurrentSelectionText(tierFilter, plans);\n\n return {\n // Data\n plans,\n filteredPlans,\n selectedPlan,\n \n // Filters\n tierFilter,\n billingCycle,\n \n // Loading and error states\n loading,\n error,\n \n // Actions\n fetchPlans,\n setSelectedPlan,\n setTierFilter,\n setBillingCycle,\n clearPlans,\n \n // Computed values\n dropdownOptions,\n currentSelectionText,\n \n // Plan operations\n handlePlanSelect,\n handleUpgrade,\n };\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { transactionApi } from '../api/client';\nimport type { Transaction, TransactionFilters, PaginatedResponse, ApiResponse } from '../types';\n\nexport interface UseTransactionsProps {\n externalId: string;\n initialFilters?: TransactionFilters;\n autoFetch?: boolean;\n}\n\nexport interface UseTransactionsReturn {\n transactions: Transaction[];\n loading: boolean;\n error: string | null;\n filters: TransactionFilters;\n meta: {\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n } | null;\n fetchTransactions: () => Promise<void>;\n updateFilters: (newFilters: Partial<TransactionFilters>) => void;\n clearFilters: () => void;\n refetch: () => Promise<void>;\n}\n\nconst DEFAULT_FILTERS: TransactionFilters = {\n page: 1,\n limit: 10,\n};\n\n// Helper function to apply frontend filters\nconst applyFrontendFilters = (transactions: Transaction[], filters: TransactionFilters): Transaction[] => {\n console.log('applyFrontendFilters input:', { transactions: transactions.length, filters });\n \n let filtered = [...transactions];\n\n // Filter by status (only if status filter is set and not empty)\n if (filters.status && filters.status.trim() !== '') {\n console.log('Applying status filter:', filters.status);\n filtered = filtered.filter(transaction => \n transaction.transactionStatus.toLowerCase() === filters.status?.toLowerCase()\n );\n console.log('After status filter:', filtered.length);\n }\n\n // Filter by date range (only if dates are set)\n if (filters.startDate && filters.startDate.trim() !== '') {\n console.log('Applying start date filter:', filters.startDate);\n const startDate = new Date(filters.startDate);\n filtered = filtered.filter(transaction => {\n const transactionDate = new Date(transaction.transactionDate || transaction.membershipDate);\n return transactionDate >= startDate;\n });\n console.log('After start date filter:', filtered.length);\n }\n\n if (filters.endDate && filters.endDate.trim() !== '') {\n console.log('Applying end date filter:', filters.endDate);\n const endDate = new Date(filters.endDate);\n filtered = filtered.filter(transaction => {\n const transactionDate = new Date(transaction.transactionDate || transaction.membershipDate);\n return transactionDate <= endDate;\n });\n console.log('After end date filter:', filtered.length);\n }\n\n console.log('applyFrontendFilters output:', filtered.length);\n return filtered;\n};\n\n// Helper function to apply frontend pagination\nconst applyFrontendPagination = (transactions: Transaction[], filters: TransactionFilters) => {\n const currentPage = filters.page || 1;\n const limit = filters.limit || 10;\n const startIndex = (currentPage - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedTransactions = transactions.slice(startIndex, endIndex);\n\n console.log('applyFrontendPagination:', {\n totalTransactions: transactions.length,\n currentPage,\n limit,\n startIndex,\n endIndex,\n paginatedCount: paginatedTransactions.length\n });\n\n return {\n data: paginatedTransactions,\n meta: {\n currentPage,\n totalPages: Math.ceil(transactions.length / limit),\n totalItems: transactions.length,\n itemsPerPage: limit,\n hasNextPage: endIndex < transactions.length,\n hasPreviousPage: currentPage > 1,\n }\n };\n};\n\nexport const useTransactions = ({\n externalId,\n initialFilters = {},\n autoFetch = false,\n}: UseTransactionsProps): UseTransactionsReturn => {\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [allTransactions, setAllTransactions] = useState<Transaction[]>([]); // Store all transactions for frontend pagination\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [filters, setFilters] = useState<TransactionFilters>({\n ...DEFAULT_FILTERS,\n ...initialFilters,\n });\n const [meta, setMeta] = useState<{\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n } | null>(null);\n const [isBackendPaginated, setIsBackendPaginated] = useState<boolean>(false);\n const hasAutoFetchedRef = useRef(false);\n\n const fetchTransactions = useCallback(async () => {\n if (!externalId) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response: ApiResponse<PaginatedResponse<Transaction> | Transaction[]> = await transactionApi.getTransactions(\n externalId,\n filters\n );\n\n if (response.success && response.data) {\n console.log('API Response successful, data type:', Array.isArray(response.data) ? 'Array' : 'Object');\n console.log('Raw API data:', response.data);\n \n // Handle both paginated and non-paginated responses\n if (Array.isArray(response.data)) {\n // Non-paginated response - handle frontend pagination\n console.log('Processing non-paginated response with', response.data.length, 'transactions');\n setIsBackendPaginated(false);\n setAllTransactions(response.data);\n \n // TEMPORARY: Skip filtering for debugging - just show all data\n console.log('TEMP: Skipping filters, showing all data directly');\n setTransactions(response.data);\n setMeta({\n currentPage: 1,\n totalPages: 1,\n totalItems: response.data.length,\n itemsPerPage: response.data.length,\n hasNextPage: false,\n hasPreviousPage: false,\n });\n \n // Apply frontend filtering and pagination (commented out for debugging)\n // const filteredTransactions = applyFrontendFilters(response.data, filters);\n // const paginatedResult = applyFrontendPagination(filteredTransactions, filters);\n \n // console.log('Setting transactions:', paginatedResult.data.length, 'items');\n // console.log('Setting meta:', paginatedResult.meta);\n \n // setTransactions(paginatedResult.data);\n // setMeta(paginatedResult.meta);\n } else {\n // Paginated response from backend\n setIsBackendPaginated(true);\n const paginatedData = response.data as PaginatedResponse<Transaction>;\n setTransactions(paginatedData.data);\n setMeta(paginatedData.meta);\n setAllTransactions([]); // Clear all transactions as backend handles pagination\n }\n } else {\n setError(response.error || 'Failed to fetch transactions');\n setTransactions([]);\n setAllTransactions([]);\n setMeta(null);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An unexpected error occurred');\n setTransactions([]);\n setAllTransactions([]);\n setMeta(null);\n } finally {\n setLoading(false);\n }\n }, [externalId, filters]);\n\n const updateFilters = useCallback((newFilters: Partial<TransactionFilters>) => {\n setFilters(prev => ({\n ...prev,\n ...newFilters,\n // Reset to page 1 when filters change (except when explicitly setting page)\n page: newFilters.page !== undefined ? newFilters.page : 1,\n }));\n }, []);\n\n // Handle frontend pagination when backend doesn't provide pagination\n useEffect(() => {\n if (!isBackendPaginated && allTransactions.length > 0) {\n const filteredTransactions = applyFrontendFilters(allTransactions, filters);\n const paginatedResult = applyFrontendPagination(filteredTransactions, filters);\n \n setTransactions(paginatedResult.data);\n setMeta(paginatedResult.meta);\n }\n }, [filters, allTransactions, isBackendPaginated]);\n\n const clearFilters = useCallback(() => {\n setFilters(DEFAULT_FILTERS);\n }, []);\n\n const refetch = useCallback(async () => {\n await fetchTransactions();\n }, [fetchTransactions]);\n\n // Auto-fetch once per externalId if enabled\n useEffect(() => {\n if (autoFetch && externalId && !hasAutoFetchedRef.current) {\n hasAutoFetchedRef.current = true;\n fetchTransactions();\n }\n }, [autoFetch, externalId]); // Intentionally omit fetchTransactions to avoid duplicate calls when its identity changes on filter updates\n\n // Fetch when filters change (only for backend pagination or initial load)\n useEffect(() => {\n if (!autoFetch) return; // Only auto-refetch if autoFetch is enabled\n \n // For backend pagination, refetch on filter changes\n // For frontend pagination, only fetch on initial load or when non-pagination filters change\n const hasNonPaginationFilters = (\n filters.startDate !== undefined ||\n filters.endDate !== undefined ||\n filters.status !== undefined\n );\n\n // In backend-paginated mode: always refetch on filter changes\n // In frontend mode: fetch only if we don't have data yet (initial load),\n // even if filters are present. Once data is loaded, do not refetch.\n const shouldFetch = isBackendPaginated || (allTransactions.length === 0 && hasNonPaginationFilters);\n \n if (shouldFetch) {\n const timeoutId = setTimeout(() => {\n fetchTransactions();\n }, 300); // Debounce API calls\n\n return () => clearTimeout(timeoutId);\n }\n }, [filters, fetchTransactions, autoFetch, isBackendPaginated, allTransactions.length]);\n\n return {\n transactions,\n loading,\n error,\n filters,\n meta,\n fetchTransactions,\n updateFilters,\n clearFilters,\n refetch,\n };\n};\n","import { useState, useCallback } from 'react';\nimport type { PaginationMeta } from '../types';\n\nexport interface UsePaginationProps {\n initialPage?: number;\n initialLimit?: number;\n}\n\nexport interface UsePaginationReturn {\n currentPage: number;\n limit: number;\n meta: PaginationMeta | null;\n goToPage: (page: number) => void;\n goToNextPage: () => void;\n goToPreviousPage: () => void;\n goToFirstPage: () => void;\n goToLastPage: () => void;\n setLimit: (newLimit: number) => void;\n setMeta: (meta: PaginationMeta) => void;\n reset: () => void;\n}\n\nexport const usePagination = ({\n initialPage = 1,\n initialLimit = 10,\n}: UsePaginationProps = {}): UsePaginationReturn => {\n const [currentPage, setCurrentPage] = useState(initialPage);\n const [limit, setLimitState] = useState(initialLimit);\n const [meta, setMeta] = useState<PaginationMeta | null>(null);\n\n const goToPage = useCallback((page: number) => {\n if (meta) {\n const validPage = Math.max(1, Math.min(page, meta.totalPages));\n setCurrentPage(validPage);\n } else {\n setCurrentPage(Math.max(1, page));\n }\n }, [meta]);\n\n const goToNextPage = useCallback(() => {\n if (meta && meta.hasNextPage) {\n setCurrentPage(prev => prev + 1);\n }\n }, [meta]);\n\n const goToPreviousPage = useCallback(() => {\n if (meta && meta.hasPreviousPage) {\n setCurrentPage(prev => prev - 1);\n }\n }, [meta]);\n\n const goToFirstPage = useCallback(() => {\n setCurrentPage(1);\n }, []);\n\n const goToLastPage = useCallback(() => {\n if (meta) {\n setCurrentPage(meta.totalPages);\n }\n }, [meta]);\n\n const setLimit = useCallback((newLimit: number) => {\n setLimitState(newLimit);\n setCurrentPage(1); // Reset to first page when changing limit\n }, []);\n\n const reset = useCallback(() => {\n setCurrentPage(initialPage);\n setLimitState(initialLimit);\n setMeta(null);\n }, [initialPage, initialLimit]);\n\n return {\n currentPage,\n limit,\n meta,\n goToPage,\n goToNextPage,\n goToPreviousPage,\n goToFirstPage,\n goToLastPage,\n setLimit,\n setMeta,\n reset,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { subscriptionApi } from '../api/client';\nimport type { ApiResponse } from '../types';\n\nexport interface UseCancelSubscriptionProps {\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport interface CancelSubscriptionOptions {\n cancellationMode?: string;\n cancellationReason?: string;\n}\n\nexport interface UseCancelSubscriptionReturn {\n loading: boolean;\n error: string | null;\n cancelSubscription: (externalId: string, options?: CancelSubscriptionOptions) => Promise<boolean>;\n reset: () => void;\n}\n\nexport const useCancelSubscription = ({\n onSuccess,\n onError,\n}: UseCancelSubscriptionProps = {}): UseCancelSubscriptionReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const cancelSubscription = useCallback(async (externalId: string, options?: CancelSubscriptionOptions): Promise<boolean> => {\n if (!externalId) {\n const errorMsg = 'External ID is required';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const response: ApiResponse<any> = await subscriptionApi.cancelSubscription(externalId, options);\n\n if (response.success) {\n onSuccess?.();\n return true;\n } else {\n const errorMsg = response.error || 'Failed to cancel subscription';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n } finally {\n setLoading(false);\n }\n }, [onSuccess, onError]);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n loading,\n error,\n cancelSubscription,\n reset,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { getApiBaseUrl, getHeaders, ENDPOINTS } from '../api/config';\nimport type { ApiResponse } from '../types';\n\nexport interface UseCustomerPortalProps {\n onSuccess?: (url: string) => void;\n onError?: (error: string) => void;\n}\n\nexport interface UseCustomerPortalReturn {\n loading: boolean;\n error: string | null;\n openCustomerPortal: (externalId: string) => Promise<boolean>;\n reset: () => void;\n}\n\n// Generic API request handler for customer portal\nasync function apiRequest<T>(\n endpoint: string, \n method: string = 'GET', \n data?: unknown\n): Promise<ApiResponse<T>> {\n try {\n const url = `${getApiBaseUrl()}${endpoint}`;\n const options: RequestInit = {\n method,\n headers: getHeaders(),\n credentials: 'include',\n };\n\n if (data) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n const result = await response.json();\n\n if (!response.ok) {\n return { success: false, error: result.message || 'An error occurred' };\n }\n\n return { success: true, data: result };\n } catch (error) {\n console.error('API request failed:', error);\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n}\n\nexport const useCustomerPortal = ({\n onSuccess,\n onError,\n}: UseCustomerPortalProps = {}): UseCustomerPortalReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const openCustomerPortal = useCallback(async (externalId: string): Promise<boolean> => {\n if (!externalId) {\n const errorMsg = 'External ID is required';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const returnUrl = `${window.location.origin}/dashboard`;\n \n const response: ApiResponse<{ url: string }> = await apiRequest(\n `${ENDPOINTS.CUSTOMER}/${externalId}/portal`,\n 'POST',\n { returnUrl }\n );\n const portalResponse: any = response.data;\n const portalUrl: string | undefined = portalResponse?.data?.url ?? portalResponse?.url;\n\n if (response.success && portalUrl) {\n onSuccess?.(portalUrl);\n // Redirect to Stripe Customer Portal\n window.location.href = portalUrl;\n return true;\n } else {\n const errorMsg =\n response.error ||\n portalResponse?.error ||\n portalResponse?.message ||\n 'Failed to open customer portal';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n } finally {\n setLoading(false);\n }\n }, [onSuccess, onError]);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n loading,\n error,\n openCustomerPortal,\n reset,\n };\n};\n","import React from 'react';\n\nexport interface BillingCycleToggleProps {\n billingCycle: 'monthly' | 'yearly';\n onBillingCycleChange: (cycle: 'monthly' | 'yearly') => void;\n}\n\nexport const BillingCycleToggle: React.FC<BillingCycleToggleProps> = ({\n billingCycle,\n onBillingCycleChange,\n}) => {\n return (\n <div className=\"flex bg-gray-100 rounded-lg p-1\">\n <button\n onClick={() => onBillingCycleChange('monthly')}\n className={`px-4 py-2 rounded-md text-sm font-medium transition-colors ${\n billingCycle === 'monthly'\n ? 'bg-white text-gray-900 shadow-sm'\n : 'text-gray-600 hover:text-gray-900'\n }`}\n >\n Monthly\n </button>\n <button\n onClick={() => onBillingCycleChange('yearly')}\n className={`px-4 py-2 rounded-md text-sm font-medium transition-colors ${\n billingCycle === 'yearly'\n ? 'bg-green-600 text-white shadow-sm'\n : 'text-gray-600 hover:text-gray-900'\n }`}\n >\n Yearly\n </button>\n </div>\n );\n};\n","import React, { useRef, useEffect } from 'react';\nimport type { DropdownOption } from '../../utils/planUtils';\n\nexport interface TierFilterDropdownProps {\n isOpen: boolean;\n onToggle: () => void;\n currentSelectionText: string;\n options: DropdownOption[];\n selectedValue: string;\n onSelect: (value: string) => void;\n}\n\nexport const TierFilterDropdown: React.FC<TierFilterDropdownProps> = ({\n isOpen,\n onToggle,\n currentSelectionText,\n options,\n selectedValue,\n onSelect,\n}) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Handle clicking outside dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n if (isOpen) {\n onToggle();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, onToggle]);\n\n const handleOptionSelect = (value: string) => {\n onSelect(value);\n onToggle(); // Close dropdown\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={onToggle}\n className=\"w-full max-w-xs px-4 py-3 border border-gray-300 rounded-lg bg-white text-left focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-green-500 flex items-center justify-between hover:border-gray-400 transition-colors\"\n >\n <span className=\"text-gray-700\">{currentSelectionText}</span>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"absolute top-full left-0 w-full max-w-xs mt-1 bg-white border border-gray-200 rounded-lg shadow-lg z-50\">\n {options.map((option) => (\n <button\n key={option.value}\n onClick={() => handleOptionSelect(option.value)}\n className={`w-full px-4 py-3 text-left hover:bg-gray-50 transition-colors border-b border-gray-100 last:border-b-0 first:rounded-t-lg last:rounded-b-lg ${\n selectedValue === option.value ? 'bg-green-50 text-green-700' : 'text-gray-700'\n }`}\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">\n {option.label}\n </span>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n","interface CheckIconProps {\n className?: string;\n}\n\nexport const CheckIcon: React.FC<CheckIconProps> = ({ className = \"w-5 h-5\" }) => {\n return (\n <svg \n className={className} \n fill=\"currentColor\" \n viewBox=\"0 0 20 20\" \n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path \n fillRule=\"evenodd\" \n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" \n clipRule=\"evenodd\" \n />\n </svg>\n );\n};\n","import React from 'react';\nimport type { Plan } from '../../types';\nimport { CheckIcon } from '../icons/CheckIcon';\nimport { getPlanFeatures, getPlanDescription, isPlanPopular } from '../../utils/planUtils';\n\nexport interface PlanCardProps {\n plan: Plan;\n isSelected: boolean;\n billingCycle: 'monthly' | 'yearly';\n onSelect: (plan: Plan) => void;\n // Indicates if this plan is the user's currently active subscription plan\n isActive?: boolean;\n}\n\nexport const PlanCard: React.FC<PlanCardProps> = ({\n plan,\n isSelected,\n billingCycle,\n onSelect,\n isActive = false,\n}) => {\n const features = getPlanFeatures(plan);\n const description = getPlanDescription(plan);\n const isPopular = isPlanPopular(plan);\n const isFree = Number(plan.fixedCost) === 0;\n\n return (\n <div\n onClick={isFree || isActive ? undefined : () => onSelect(plan)}\n className={`relative border rounded-lg p-6 transition-all ${\n !isFree && !isActive ? 'cursor-pointer' : 'cursor-default'\n } ${\n !isFree && isSelected && !isActive\n ? 'border-green-500 bg-green-50'\n : 'border-gray-200'\n } ${!isFree && !isActive ? 'hover:border-gray-300' : ''} ${isPopular ? 'border-green-500' : ''}`}\n >\n {isPopular && (\n <div className=\"absolute -top-3 left-1/2 transform -translate-x-1/2\">\n <span className=\"bg-green-500 text-white px-3 py-1 rounded-full text-xs font-medium\">\n Most Popular\n </span>\n </div>\n )}\n \n {!isFree && isSelected && !isActive && (\n <div className=\"absolute top-4 right-4\">\n <div className=\"bg-green-500 text-white rounded-full p-1\">\n <CheckIcon className=\"w-4 h-4\" />\n </div>\n </div>\n )}\n \n <div className=\"mb-4\">\n <h4 className=\"text-xl font-bold text-gray-900 mb-2\">{plan.name}</h4>\n <p className=\"text-gray-600 text-sm mb-4\">\n {description}\n </p>\n \n <div className=\"mb-4\">\n {isFree ? (\n <span className=\"text-3xl font-bold text-gray-900\">Free</span>\n ) : (\n <>\n <span className=\"text-3xl font-bold text-gray-900\">\n ${plan.fixedCost}\n </span>\n <span className=\"text-gray-600 ml-1\">\n per {billingCycle === 'yearly' ? 'year' : 'month'}\n </span>\n </>\n )}\n </div>\n </div>\n \n <ul className=\"space-y-2 mb-6\">\n {features.map((feature, index) => (\n <li key={index} className=\"flex items-center text-sm\">\n <CheckIcon className=\"w-4 h-4 text-green-500 mr-2 flex-shrink-0\" />\n {feature}\n </li>\n ))}\n </ul>\n \n {!isFree && (\n isActive ? (\n <button\n className=\"w-full bg-gray-100 border border-gray-200 text-gray-500 py-2 px-4 rounded-md font-medium cursor-default\"\n disabled\n >\n Active\n </button>\n ) : isSelected ? (\n <button className=\"w-full bg-green-600 text-white py-2 px-4 rounded-md font-medium\">\n Selected\n </button>\n ) : (\n <button className=\"w-full bg-white border border-gray-300 text-gray-700 py-2 px-4 rounded-md font-medium hover:bg-gray-50\">\n Select\n </button>\n )\n )}\n </div>\n );\n};\n\n","interface IconProps {\n className?: string;\n}\n\nexport const SearchIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nexport const FilterIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\" />\n </svg>\n);\n\nexport const TrendingUpIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 7h8m0 0v8m0-8l-8 8-4-4-6 6\" />\n </svg>\n);\n\nexport const LoadingSpinner: React.FC<IconProps> = ({ className = \"w-8 h-8\" }) => (\n <svg className={`${className} animate-spin`} fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n);\n\nexport const CheckCircleIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nexport const AddIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nexport const CreditCardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n);\n\nexport const DeleteIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n);\n\nexport const DownloadIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nexport const DashboardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n);\n\nexport const EmailIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n);\n\nexport const ReceiptIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5l-5-5-4 4-3-3m6-6V4a2 2 0 00-2-2H5a2 2 0 00-2 2v16l3-3 3 3 3-3 3 3z\" />\n </svg>\n);\n\nexport const StarBorderIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n);\n\nexport const UpgradeIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n);\n\nexport const CancelIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nexport const AddCardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 6v6m0 0v6m0-6h6m-6 0H6m12-3h3a3 3 0 013 3v8a3 3 0 01-3 3H6a3 3 0 01-3-3v-8a3 3 0 013-3h3\" />\n </svg>\n);\n","import React from 'react';\nimport type { Plan } from '../../types';\nimport { PlanCard } from './PlanCard';\nimport { LoadingSpinner } from '../icons/CommonIcons';\n\nexport interface PlansGridProps {\n plans: Plan[];\n selectedPlan: Plan | null;\n billingCycle: 'monthly' | 'yearly';\n loading: boolean;\n error: string | null;\n onPlanSelect: (plan: Plan) => void;\n // Currently active subscription plan code to mark the active plan in the grid\n activePlanCode?: string;\n}\n\nexport const PlansGrid: React.FC<PlansGridProps> = ({\n plans,\n selectedPlan,\n billingCycle,\n loading,\n error,\n onPlanSelect,\n activePlanCode,\n}) => {\n if (loading) {\n return (\n <div className=\"flex justify-center py-8\">\n <LoadingSpinner className=\"h-10 w-10 text-primary animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-4 bg-red-50 border border-red-200 text-red-700 rounded-md\">\n {error}\n </div>\n );\n }\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {plans.map((plan) => (\n <PlanCard\n key={plan.id}\n plan={plan}\n isSelected={selectedPlan?.id === plan.id}\n billingCycle={billingCycle}\n onSelect={onPlanSelect}\n isActive={activePlanCode ? plan.code === activePlanCode : false}\n />\n ))}\n </div>\n );\n};\n\n","import React, { useState } from 'react';\nimport type { Plan } from '../../types';\nimport type { DropdownOption } from '../../utils/planUtils';\nimport { BillingCycleToggle } from './BillingCycleToggle';\nimport { TierFilterDropdown } from './TierFilterDropdown';\nimport { PlansGrid } from './PlansGrid';\n\nexport interface PlanSelectorProps {\n // Plans data\n plans: Plan[];\n selectedPlan: Plan | null;\n \n // Filters\n tierFilter: string;\n billingCycle: 'monthly' | 'yearly';\n \n // Loading and error states\n loading: boolean;\n error: string | null;\n \n // Computed values\n dropdownOptions: DropdownOption[];\n currentSelectionText: string;\n \n // Event handlers\n onPlanSelect: (plan: Plan) => void;\n onTierFilterChange: (filter: string) => void;\n onBillingCycleChange: (cycle: 'monthly' | 'yearly') => void;\n // Currently active subscription plan code to disable and mark Active\n activePlanCode?: string;\n}\n\nexport const PlanSelector: React.FC<PlanSelectorProps> = ({\n plans,\n selectedPlan,\n tierFilter,\n billingCycle,\n loading,\n error,\n dropdownOptions,\n currentSelectionText,\n onPlanSelect,\n onTierFilterChange,\n onBillingCycleChange,\n activePlanCode,\n}) => {\n const [isDropdownOpen, setIsDropdownOpen] = useState<boolean>(false);\n\n const handleDropdownToggle = () => {\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n const handleTierSelect = (value: string) => {\n onTierFilterChange(value);\n setIsDropdownOpen(false);\n };\n\n return (\n <div className=\"mb-6\">\n <h3 className=\"text-lg font-semibold mb-2\">Upgrade your plan</h3>\n <div className=\"flex items-center gap-4 justify-between flex-wrap mb-6\">\n <p className=\"text-gray-600 mb-0 flex-1 min-w-[260px]\">\n Enhance your experience with exclusive access - unlock more features and possibilities!\n </p>\n\n <div className=\"flex items-center gap-4\">\n {/* Custom Tier Filter Dropdown */}\n <TierFilterDropdown\n isOpen={isDropdownOpen}\n onToggle={handleDropdownToggle}\n currentSelectionText={currentSelectionText}\n options={dropdownOptions}\n selectedValue={tierFilter}\n onSelect={handleTierSelect}\n />\n\n {/* Billing Toggle */}\n <BillingCycleToggle\n billingCycle={billingCycle}\n onBillingCycleChange={onBillingCycleChange}\n />\n </div>\n </div>\n\n {/* Plans Grid */}\n <PlansGrid\n plans={plans}\n selectedPlan={selectedPlan}\n billingCycle={billingCycle}\n loading={loading}\n error={error}\n onPlanSelect={onPlanSelect}\n activePlanCode={activePlanCode}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { useCustomerPortal } from '../../hooks/useCustomerPortal';\n\nexport interface ChangeCardButtonProps {\n externalId: string;\n className?: string;\n children?: React.ReactNode;\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport const ChangeCardButton: React.FC<ChangeCardButtonProps> = ({\n externalId,\n className = '',\n children,\n onSuccess,\n onError,\n}) => {\n const { loading, openCustomerPortal } = useCustomerPortal({\n onSuccess: (url) => {\n console.log('Customer portal opened:', url);\n onSuccess?.();\n },\n onError: (error) => {\n console.error('Failed to open customer portal:', error);\n onError?.(error);\n },\n });\n\n const handleClick = async () => {\n await openCustomerPortal(externalId);\n };\n\n const defaultClassName = \"text-sm text-blue-600 font-medium hover:text-blue-700 hover:underline disabled:opacity-50 disabled:cursor-not-allowed\";\n const finalClassName = className || defaultClassName;\n\n return (\n <button\n onClick={handleClick}\n disabled={loading}\n className={finalClassName}\n type=\"button\"\n >\n {loading ? 'Opening...' : (children || 'Change Card')}\n </button>\n );\n};\n","import React from 'react';\nimport type { PaymentParams } from '../../hooks/payments/usePaymentParams';\n\ninterface PaymentCancelViewProps {\n details: PaymentParams;\n}\n\nexport const PaymentCancelView: React.FC<PaymentCancelViewProps> = ({ details }) => {\n return (\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md overflow-hidden\">\n {/* Cancel Header */}\n <div className=\"bg-gradient-to-r from-orange-500 to-red-500 text-white p-6 text-center\">\n <div className=\"text-4xl mb-2\">❌</div>\n <h1 className=\"text-2xl font-bold\">Payment Cancelled</h1>\n <p className=\"text-orange-100 mt-1\">Your payment was not processed</p>\n </div>\n\n {/* Cancellation Details */}\n <div className=\"p-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">What Happened?</h2>\n <div className=\"p-4 bg-orange-50 rounded-lg mb-4\">\n <p className=\"text-orange-800\">\n {details.reason\n ? `Reason: ${details.reason}`\n : 'You cancelled the payment process before it was completed. No charges were made to your account.'}\n </p>\n </div>\n\n {(details.gateway || details.sessionId) && (\n <div className=\"space-y-3 mb-4\">\n <h3 className=\"font-medium text-gray-900\">Transaction Details</h3>\n {details.gateway && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment Gateway</span>\n <span className=\"font-medium capitalize\">{details.gateway}</span>\n </div>\n )}\n {details.sessionId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Session ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.sessionId}</span>\n </div>\n )}\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Status</span>\n <span className=\"font-medium text-orange-600\">Cancelled</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Date</span>\n <span className=\"font-medium\">{new Date().toLocaleDateString()}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* What's Next */}\n <div className=\"mb-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"font-semibold text-blue-900 mb-2\">What's Next?</h3>\n <ul className=\"text-sm text-blue-800 space-y-1\">\n <li>• No charges were made to your account</li>\n <li>• You can try the payment again anytime</li>\n <li>• Contact support if you need assistance</li>\n <li>• Your cart/selection is still saved</li>\n </ul>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <button\n onClick={() => window.history.back()}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Try Payment Again\n </button>\n\n <button\n onClick={() => (window.location.href = '/dashboard')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Browse Plans\n </button>\n\n <button\n onClick={() => (window.location.href = '/')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Return Home\n </button>\n </div>\n\n {/* Support */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-500\">\n Having trouble?{' '}\n <a href=\"/support\" className=\"text-blue-600 hover:text-blue-700\">\n Contact Support\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentCancelView;\n","import React from 'react';\nimport type { PaymentParams } from '../../hooks/payments/usePaymentParams';\n\ninterface PaymentSuccessViewProps {\n details: PaymentParams;\n}\n\nexport const PaymentSuccessView: React.FC<PaymentSuccessViewProps> = ({ details }) => {\n return (\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md overflow-hidden\">\n {/* Success Header */}\n <div className=\"bg-gradient-to-r from-green-500 to-green-600 text-white p-6 text-center\">\n <div className=\"text-4xl mb-2\">✅</div>\n <h1 className=\"text-2xl font-bold\">Payment Successful!</h1>\n <p className=\"text-green-100 mt-1\">Thank you for your purchase</p>\n </div>\n\n {/* Payment Details */}\n <div className=\"p-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Payment Details</h2>\n <div className=\"space-y-3\">\n {details.gateway && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment Gateway</span>\n <span className=\"font-medium capitalize\">{details.gateway}</span>\n </div>\n )}\n {details.sessionId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Session ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.sessionId}</span>\n </div>\n )}\n {details.paymentId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.paymentId}</span>\n </div>\n )}\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Status</span>\n <span className=\"font-medium text-green-600\">Completed</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Date</span>\n <span className=\"font-medium\">{new Date().toLocaleDateString()}</span>\n </div>\n </div>\n </div>\n\n {/* Next Steps */}\n <div className=\"mb-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"font-semibold text-blue-900 mb-2\">What's Next?</h3>\n <ul className=\"text-sm text-blue-800 space-y-1\">\n <li>• You'll receive a confirmation email shortly</li>\n <li>• Your subscription/purchase is now active</li>\n <li>• Access your dashboard to manage your account</li>\n </ul>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <button\n onClick={() => (window.location.href = '/dashboard')}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Go to Dashboard\n </button>\n\n <button\n onClick={() => (window.location.href = '/')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Return Home\n </button>\n </div>\n\n {/* Support */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-500\">\n Need help?{' '}\n <a href=\"/support\" className=\"text-blue-600 hover:text-blue-700\">\n Contact Support\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentSuccessView;\n","import React from 'react';\nimport type { Transaction } from '../../types';\nimport { formatDate } from '../../utils/planUtils';\n\nexport interface TransactionListProps {\n transactions: Transaction[];\n loading?: boolean;\n error?: string | null;\n onInvoiceClick?: (transactionId: string) => void;\n className?: string;\n}\n\nconst getStatusColor = (status: string) => {\n switch (status.toLowerCase()) {\n case 'activated':\n case 'succeeded':\n case 'renewed':\n case 'use_stripe_sdk':\n return 'bg-green-100 text-green-800';\n case 'pending':\n case 'processing':\n return 'bg-yellow-100 text-yellow-800';\n case 'payment_failed':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-blue-100 text-blue-800';\n }\n};\n\nconst formatCurrency = (amount: string | number, currency = 'USD') => {\n const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(numericAmount);\n};\n\nexport const TransactionList: React.FC<TransactionListProps> = ({\n transactions,\n loading = false,\n error = null,\n onInvoiceClick,\n className = '',\n}) => {\n console.log('=== TransactionList Render ===');\n console.log('transactions:', transactions);\n console.log('transactions.length:', transactions.length);\n console.log('First transaction:', transactions[0]);\n console.log('loading:', loading);\n console.log('error:', error);\n console.log('=== End TransactionList Debug ===');\n\n if (loading) {\n return (\n <div className={`flex items-center justify-center py-8 ${className}`}>\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\n <span className=\"ml-2 text-gray-600\">Loading transactions...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`bg-red-50 border border-red-200 rounded-md p-4 ${className}`}>\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-red-800\">Error loading transactions</h3>\n <div className=\"mt-2 text-sm text-red-700\">{error}</div>\n </div>\n </div>\n </div>\n );\n }\n\n if (transactions.length === 0) {\n return (\n <div className={`text-center py-8 ${className}`}>\n <svg\n className=\"mx-auto h-12 w-12 text-gray-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <h3 className=\"mt-2 text-sm font-medium text-gray-900\">No transactions found</h3>\n <p className=\"mt-1 text-sm text-gray-500\">There are no transactions to display.</p>\n </div>\n );\n }\n\n console.log('About to render transactions, count:', transactions.length);\n \n return (\n <div className={`bg-white shadow overflow-hidden sm:rounded-md ${className}`}>\n <ul className=\"divide-y divide-gray-200\">\n {transactions.map((transaction, index) => {\n console.log(`Rendering transaction ${index}:`, transaction);\n return (\n <li key={transaction.id} className=\"px-6 py-4 hover:bg-gray-50\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {transaction.planName ? `${transaction.planName} Plan` : `Transaction #${transaction.transactionCode || transaction.id}`}\n </p>\n <p className=\"text-sm text-gray-500\">\n {formatDate(transaction.transactionDate || transaction.membershipDate)}\n </p>\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"text-right\">\n <p className=\"text-sm font-medium text-gray-900\">\n {formatCurrency(transaction.amount, transaction.currency?.toUpperCase())}\n </p>\n {transaction.tax && transaction.tax > 0 && (\n <p className=\"text-xs text-gray-500\">\n Tax: {formatCurrency(transaction.tax)}\n </p>\n )}\n {transaction.charge && parseFloat(transaction.charge.toString()) > 0 && (\n <p className=\"text-xs text-gray-500\">\n Charge: {formatCurrency(transaction.charge)}\n </p>\n )}\n </div>\n <span\n className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusColor(\n transaction.transactionStatus\n )}`}\n >\n {transaction.transactionStatus}\n </span>\n </div>\n </div>\n \n <div className=\"mt-2 flex items-center justify-between\">\n <div className=\"flex items-center text-sm text-gray-500 flex-wrap gap-4\">\n {transaction.paymentGateway && (\n <span>Gateway: {transaction.paymentGateway}</span>\n )}\n {transaction.planInterval && (\n <span>Billing: {transaction.planInterval}</span>\n )}\n {transaction.expiryDate && (\n <span>Expires: {formatDate(transaction.expiryDate)}</span>\n )}\n {transaction.isPlanActive !== undefined && (\n <span className={transaction.isPlanActive ? 'text-green-600' : 'text-red-600'}>\n {transaction.isPlanActive ? 'Active' : 'Inactive'}\n </span>\n )}\n </div>\n \n {transaction.invoiceUrl && onInvoiceClick && (\n <button\n onClick={() => onInvoiceClick(transaction.id)}\n className=\"text-sm text-primary hover:text-primary-dark font-medium\"\n >\n View Invoice\n </button>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n","import React from 'react';\nimport type { PaginationMeta } from '../../types';\n\nexport interface PaginationProps {\n meta: PaginationMeta;\n onPageChange: (page: number) => void;\n onLimitChange?: (limit: number) => void;\n showLimitSelector?: boolean;\n limitOptions?: number[];\n className?: string;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n meta,\n onPageChange,\n onLimitChange,\n showLimitSelector = true,\n limitOptions = [10, 25, 50, 100],\n className = '',\n}) => {\n const { currentPage, totalPages, totalItems, itemsPerPage, hasNextPage, hasPreviousPage } = meta;\n\n // Generate page numbers to display\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const maxVisiblePages = 7;\n \n if (totalPages <= maxVisiblePages) {\n // Show all pages if total pages is small\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // Show first page\n pages.push(1);\n \n if (currentPage > 4) {\n pages.push('...');\n }\n \n // Show pages around current page\n const start = Math.max(2, currentPage - 1);\n const end = Math.min(totalPages - 1, currentPage + 1);\n \n for (let i = start; i <= end; i++) {\n if (i !== 1 && i !== totalPages) {\n pages.push(i);\n }\n }\n \n if (currentPage < totalPages - 3) {\n pages.push('...');\n }\n \n // Show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n }\n \n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n\n const startItem = (currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n return (\n <div className={`flex flex-col sm:flex-row items-center justify-between gap-4 ${className}`}>\n {/* Items info */}\n <div className=\"text-sm text-gray-700\">\n Showing {startItem} to {endItem} of {totalItems} results\n </div>\n\n <div className=\"flex items-center gap-4\">\n {/* Limit selector */}\n {showLimitSelector && onLimitChange && (\n <div className=\"flex items-center gap-2\">\n <label htmlFor=\"limit-select\" className=\"text-sm text-gray-700\">\n Show:\n </label>\n <select\n id=\"limit-select\"\n value={itemsPerPage}\n onChange={(e) => onLimitChange(Number(e.target.value))}\n className=\"border border-gray-300 rounded px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\n >\n {limitOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Pagination controls */}\n <div className=\"flex items-center gap-1\">\n {/* Previous button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n className=\"px-3 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) => (\n <React.Fragment key={index}>\n {page === '...' ? (\n <span className=\"px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300\">\n ...\n </span>\n ) : (\n <button\n onClick={() => onPageChange(page as number)}\n className={`px-3 py-2 text-sm font-medium border ${\n currentPage === page\n ? 'bg-primary text-white border-primary'\n : 'text-gray-700 bg-white border-gray-300 hover:bg-gray-50'\n }`}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n\n {/* Next button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n className=\"px-3 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { TransactionList } from './TransactionList';\nimport { Pagination } from '../pagination/Pagination';\nimport { useTransactions } from '../../hooks/useTransactions';\nimport type { TransactionFilters } from '../../types';\n\nexport interface TransactionModalProps {\n isOpen: boolean;\n onClose: () => void;\n externalId: string;\n title?: string;\n}\n\nexport const TransactionModal: React.FC<TransactionModalProps> = ({\n isOpen,\n onClose,\n externalId,\n title = 'Transaction History',\n}) => {\n const {\n transactions,\n loading,\n error,\n filters,\n meta,\n updateFilters,\n } = useTransactions({\n externalId,\n initialFilters: { page: 1, limit: 10 },\n autoFetch: true, // Enable auto-fetch so it works when modal opens\n });\n\n console.log('=== TransactionModal Debug ===');\n console.log('isOpen:', isOpen);\n console.log('externalId:', externalId);\n console.log('transactions:', transactions);\n console.log('transactions.length:', transactions.length);\n console.log('loading:', loading);\n console.log('error:', error);\n console.log('filters:', filters);\n console.log('meta:', meta);\n console.log('=== End Debug ===');\n \n\n // Note: Initial and filter-based fetching is handled inside useTransactions via autoFetch.\n // Removing redundant fetch-on-open logic here prevents repeated API calls\n // when filtered results are empty (e.g., status filter yields 0 results).\n\n const handlePageChange = (page: number) => {\n updateFilters({ page });\n };\n\n const handleLimitChange = (limit: number) => {\n updateFilters({ limit, page: 1 });\n };\n\n const handleInvoiceClick = (transactionId: string) => {\n // TODO: Implement invoice viewing logic\n console.log('View invoice for transaction:', transactionId);\n };\n\n const handleFilterChange = (newFilters: Partial<TransactionFilters>) => {\n updateFilters(newFilters);\n };\n\n if (!isOpen) return null;\n\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n {/* Background overlay */}\n <div\n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity z-0\"\n onClick={onClose}\n />\n\n {/* Modal panel */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-4xl sm:w-full relative z-10\">\n {/* Header */}\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n {title}\n </h3>\n <button\n onClick={onClose}\n className=\"bg-white rounded-md text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary\"\n >\n <span className=\"sr-only\">Close</span>\n <svg className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Filters */}\n <div className=\"mb-4 grid grid-cols-1 sm:grid-cols-3 gap-4\">\n <div>\n <label htmlFor=\"status-filter\" className=\"block text-sm font-medium text-gray-700 mb-1\">\n Status\n </label>\n <select\n id=\"status-filter\"\n value={filters.status || ''}\n onChange={(e) => handleFilterChange({ status: e.target.value || undefined })}\n className=\"w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\n >\n <option value=\"\">All</option>\n <option value=\"succeeded\">Completed</option>\n <option value=\"pending\">Pending</option>\n <option value=\"payment_failed\">Failed</option>\n </select>\n </div>\n\n <div>\n <label htmlFor=\"start-date\" className=\"block text-sm font-medium text-gray-700 mb-1\">\n Start Date\n </label>\n <input\n type=\"date\"\n id=\"start-date\"\n value={filters.startDate || ''}\n onChange={(e) => handleFilterChange({ startDate: e.target.value || undefined })}\n className=\"w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\n />\n </div>\n\n <div>\n <label htmlFor=\"end-date\" className=\"block text-sm font-medium text-gray-700 mb-1\">\n End Date\n </label>\n <input\n type=\"date\"\n id=\"end-date\"\n value={filters.endDate || ''}\n onChange={(e) => handleFilterChange({ endDate: e.target.value || undefined })}\n className=\"w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\n />\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"px-4 pb-4 sm:px-6 sm:pb-6\">\n <TransactionList\n transactions={transactions}\n loading={loading}\n error={error}\n onInvoiceClick={handleInvoiceClick}\n className=\"mb-4\"\n />\n\n {/* Pagination */}\n {meta && (\n <Pagination\n meta={meta}\n onPageChange={handlePageChange}\n onLimitChange={handleLimitChange}\n showLimitSelector={true}\n limitOptions={[5, 10, 25, 50]}\n />\n )}\n </div>\n\n {/* Footer */}\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-primary text-base font-medium text-white hover:bg-primary-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary sm:ml-3 sm:w-auto sm:text-sm\"\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport type { Subscription } from '../../types';\nimport { formatDate } from '../../utils/planUtils';\nimport { TransactionModal } from '../transaction/TransactionModal';\nimport { useCancelSubscription } from '../../hooks/useCancelSubscription';\nimport { ChangeCardButton } from '../payments/ChangeCardButton';\n\nexport interface SubscriptionDetailsProps {\n subscription: Subscription | null;\n email: string;\n externalId: string;\n onChangeEmail: () => void;\n onSubscriptionCancelled?: () => void;\n}\n\nexport const SubscriptionDetails: React.FC<SubscriptionDetailsProps> = ({\n subscription,\n email,\n externalId,\n onChangeEmail,\n onSubscriptionCancelled,\n}) => {\n const [isTransactionModalOpen, setIsTransactionModalOpen] = useState(false);\n const [showCancelConfirmation, setShowCancelConfirmation] = useState(false);\n\n const { cancelSubscription, loading: cancelLoading } = useCancelSubscription({\n onSuccess: () => {\n setShowCancelConfirmation(false);\n onSubscriptionCancelled?.();\n // Show success message or notification here\n alert('Subscription cancelled successfully');\n },\n onError: (error) => {\n // Show error message or notification here\n alert(`Failed to cancel subscription: ${error}`);\n },\n });\n\n const handleTransactionClick = () => {\n setIsTransactionModalOpen(true);\n };\n\n const handleCancelClick = () => {\n setShowCancelConfirmation(true);\n };\n\n const handleConfirmCancel = async () => {\n await cancelSubscription(externalId, {\n cancellationMode: 'endOfPeriod',\n cancellationReason: 'subscription_user_canceled_request'\n });\n };\n\n const handleCancelModalClose = () => {\n setShowCancelConfirmation(false);\n };\n return (\n <>\n {/* Email summary and change button */}\n <div className=\"mb-6 flex items-center justify-between\">\n <span className=\"text-sm text-gray-600\">\n Using email: <span className=\"font-medium\">{email}</span>\n </span>\n <button\n className=\"text-sm text-primary hover:underline\"\n onClick={onChangeEmail}\n >\n Change email\n </button>\n </div>\n\n {/* Subscription Details Header */}\n <div className=\"mb-6 bg-white rounded-lg border border-gray-200 p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold\">Subscription Details</h2>\n <div className=\"flex gap-4\">\n <button\n onClick={handleTransactionClick}\n className=\"text-sm text-green-600 font-medium hover:text-green-700 hover:underline\"\n >\n Transactions\n </button>\n <ChangeCardButton\n externalId={externalId}\n className=\"text-sm text-blue-600 font-medium hover:text-blue-700 hover:underline\"\n onSuccess={() => {\n // Optional: Show success message or refresh data\n console.log('Customer portal opened successfully');\n }}\n onError={(error) => {\n // Optional: Show error message\n alert(`Failed to open payment portal: ${error}`);\n }}\n >\n Change Card\n </ChangeCardButton>\n <button\n onClick={handleCancelClick}\n className=\"text-sm text-red-500 font-medium hover:text-red-600 hover:underline\"\n >\n Cancel Renewal\n </button>\n </div>\n </div>\n \n <div className=\"grid grid-cols-2 md:grid-cols-5 gap-4 mb-4\">\n <div>\n <p className=\"text-sm text-gray-500\">Active Subscription</p>\n <p className=\"font-medium\">{subscription?.plan?.name}</p>\n </div>\n <div>\n <p className=\"text-sm text-gray-500\">Subscription Type</p>\n <p className=\"font-medium\">{subscription?.plan?.interval}</p>\n </div>\n <div>\n <p className=\"text-sm text-gray-500\">Subscription Renews on</p>\n <p className=\"font-medium\">\n {subscription?.expiryDate ? formatDate(subscription.expiryDate) : ''}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-gray-500\">Active Jobs</p>\n <p className=\"font-medium\">\n {subscription?.usage?.ACTIVE_JOBS || 0}/{subscription?.meta?.ACTIVE_JOBS}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-gray-500\">Candidates</p>\n <p className=\"font-medium\">\n {subscription?.usage?.CANDIDATES || 0}/{subscription?.meta?.CANDIDATES}\n </p>\n </div>\n </div>\n </div>\n\n {/* Transaction Modal */}\n <TransactionModal\n isOpen={isTransactionModalOpen}\n onClose={() => setIsTransactionModalOpen(false)}\n externalId={externalId}\n title=\"Transaction History\"\n />\n\n {/* Cancel Confirmation Modal */}\n {showCancelConfirmation && (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n {/* Background overlay */}\n <div\n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity z-0\"\n onClick={handleCancelModalClose}\n />\n\n {/* Modal panel */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full relative z-10\">\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"sm:flex sm:items-start\">\n <div className=\"mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\">\n <svg\n className=\"h-6 w-6 text-red-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n </div>\n <div className=\"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n Cancel Subscription\n </h3>\n <div className=\"mt-2\">\n <p className=\"text-sm text-gray-500\">\n Are you sure you want to cancel your subscription? This action will prevent\n automatic renewal, but you'll continue to have access until your current\n billing period ends.\n </p>\n </div>\n </div>\n </div>\n </div>\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={handleConfirmCancel}\n disabled={cancelLoading}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {cancelLoading ? 'Cancelling...' : 'Cancel Subscription'}\n </button>\n <button\n type=\"button\"\n onClick={handleCancelModalClose}\n disabled={cancelLoading}\n className=\"mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Keep Subscription\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\n\nexport interface EmailEntryProps {\n email: string;\n emailError: string | null;\n onEmailChange: (email: string) => void;\n onEmailSubmit: () => void;\n onEmailError: (error: string | null) => void;\n}\n\nexport const EmailEntry: React.FC<EmailEntryProps> = ({\n email,\n emailError,\n onEmailChange,\n onEmailSubmit,\n onEmailError,\n}) => {\n const handleEmailChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n onEmailChange(value);\n \n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!value) {\n onEmailError('Email is required');\n } else if (!emailRegex.test(value)) {\n onEmailError('Please enter a valid email address');\n } else {\n onEmailError(null);\n }\n };\n\n return (\n <div className=\"p-8 max-w-xl mx-auto text-center bg-white rounded-lg shadow-md\">\n <h1 className=\"text-2xl font-bold mb-2\">\n Your Subscription Portal\n </h1>\n\n <p className=\"text-gray-700 mb-8\">\n Enter your email to access your subscription details, plans and transaction history.\n </p>\n\n <div className=\"mb-6\">\n <div className=\"mb-4\">\n <label htmlFor=\"email\" className=\"sr-only\">Email Address</label>\n <input\n id=\"email\"\n type=\"email\"\n className={`w-full px-4 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-primary ${\n emailError ? 'border-red-500' : 'border-gray-300'\n }`}\n placeholder=\"Email Address\"\n value={email}\n onChange={handleEmailChange}\n required\n />\n <p className={`mt-1 text-sm ${emailError ? 'text-red-500' : 'text-gray-500'}`}>\n {emailError || \"We'll use this to identify your account\"}\n </p>\n </div>\n\n <button\n className={`w-full btn-primary py-2 px-4 rounded-md ${\n (!email || !!emailError) ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n disabled={!email || !!emailError}\n onClick={onEmailSubmit}\n >\n Continue\n </button>\n </div>\n\n <p className=\"text-sm text-gray-500\">\n Don't have a subscription yet? You can browse our plans after entering your email.\n </p>\n </div>\n );\n};\n","import React from 'react';\nimport type { Plan } from '../../types';\n\nexport interface UpgradeSummaryProps {\n selectedPlan: Plan | null;\n onUpgrade: () => void;\n}\n\nexport const UpgradeSummary: React.FC<UpgradeSummaryProps> = ({\n selectedPlan,\n onUpgrade,\n}) => {\n if (!selectedPlan || Number(selectedPlan.fixedCost) === 0) {\n return null;\n }\n\n return (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h4 className=\"font-semibold text-gray-900\">Summary</h4>\n <p className=\"text-gray-600\">{selectedPlan.name}</p>\n <p className=\"text-sm text-gray-500\">See Price Breakdown</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-2xl font-bold text-gray-900\">\n ${selectedPlan.fixedCost}/Yr\n </p>\n <p className=\"text-sm text-gray-500\">Due Today</p>\n <p className=\"text-sm font-medium\">${selectedPlan.fixedCost}</p>\n </div>\n <button\n onClick={onUpgrade}\n className=\"bg-green-600 text-white px-6 py-2 rounded-md font-medium hover:bg-green-700 transition-colors\"\n >\n Upgrade Now\n </button>\n </div>\n </div>\n );\n};\n","import React from \"react\";\n\n// Renders the public/file.svg inside an inline <svg>, so you can pass standard SVG props\n// like className, width, height, etc. You can also override the src via props if needed.\n\ntype Props = React.SVGProps<SVGSVGElement> & {\n src?: string;\n alt?: string;\n};\n\nexport const LogoInline = ({ src, alt = \"Logo\", viewBox = \"0 0 1024 1024\", ...props }: Props) => {\n // Resolve the public asset respecting Vite's base path\n const resolvedSrc = src ?? `${import.meta.env.BASE_URL}file.svg`;\n\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={viewBox}\n aria-label={alt}\n role=\"img\"\n {...props}\n >\n {/* Embed the external SVG asset inside this inline <svg> */}\n <image href={resolvedSrc} width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid meet\" />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { LogoInline } from '../LogoInline';\n\ninterface LayoutProps {\n children: ReactNode;\n}\n\nexport const Layout: React.FC<LayoutProps> = ({ children }) => {\n return (\n <div className=\"flex flex-col min-h-screen w-full\">\n <header className=\"bg-white/80 backdrop-blur border-b border-gray-200\">\n <nav className=\"w-full flex items-center justify-between px-4 py-3\">\n <div className=\"flex-grow\">\n <RouterLink to=\"/\" className=\"no-underline text-inherit\">\n <div className=\"flex items-center\">\n <LogoInline className=\"h-8 w-auto\" alt=\"SubOS\" />\n </div>\n </RouterLink>\n </div>\n </nav>\n </header>\n \n <main className=\"flex-1 w-full\">\n {children}\n </main>\n \n <footer className=\"bg-gray-100 py-6 w-full mt-auto\">\n <div className=\"max-w-7xl mx-auto px-4\">\n <p className=\"text-sm text-gray-600 text-center\">\n © {new Date().getFullYear()} SubOS. All rights reserved.\n </p>\n </div>\n </footer>\n </div>\n );\n};\n\n\n","import React, { useEffect } from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { useEmailManagement } from '../hooks/useEmailManagement';\nimport { useSubscription } from '../hooks/useSubscription';\nimport { usePlans } from '../hooks/usePlans';\nimport { EmailEntry } from '../components/email/EmailEntry';\nimport { SubscriptionDetails } from '../components/subscription/SubscriptionDetails';\nimport { PlanSelector } from '../components/plans/PlanSelector';\nimport { UpgradeSummary } from '../components/upgrade/UpgradeSummary';\n\nexport const DashboardPage: React.FC = () => {\n // Custom hooks\n const emailManagement = useEmailManagement();\n const subscription = useSubscription();\n const plans = usePlans();\n\n // Load dashboard data when email is validated\n const loadDashboardData = (email: string) => {\n subscription.fetchSubscription(email);\n plans.fetchPlans();\n };\n\n // Handle email validation\n useEffect(() => {\n if (emailManagement.email && !emailManagement.isEmailScreen) {\n loadDashboardData(emailManagement.email);\n }\n }, [emailManagement.email, emailManagement.isEmailScreen]);\n\n // Handle email change - clear all data\n const handleChangeEmail = () => {\n emailManagement.handleChangeEmail();\n subscription.clearSubscription();\n plans.clearPlans();\n };\n\n // Handle upgrade\n const handleUpgrade = () => {\n plans.handleUpgrade(emailManagement.email);\n };\n\n return (\n <Layout>\n <div className=\"max-w-7xl mx-auto w-full h-full py-8 px-4\">\n {!emailManagement.isEmailScreen ? (\n <>\n <SubscriptionDetails\n subscription={subscription.subscription}\n email={emailManagement.email}\n externalId={emailManagement.email}\n onChangeEmail={handleChangeEmail}\n onSubscriptionCancelled={() => {\n // Refresh subscription data after cancellation\n subscription.fetchSubscription(emailManagement.email);\n }}\n />\n\n <PlanSelector\n plans={plans.filteredPlans}\n selectedPlan={plans.selectedPlan}\n tierFilter={plans.tierFilter}\n billingCycle={plans.billingCycle}\n loading={plans.loading}\n error={plans.error}\n dropdownOptions={plans.dropdownOptions}\n currentSelectionText={plans.currentSelectionText}\n onPlanSelect={plans.handlePlanSelect}\n onTierFilterChange={plans.setTierFilter}\n onBillingCycleChange={plans.setBillingCycle}\n activePlanCode={subscription.subscription?.plan.code}\n />\n\n <UpgradeSummary\n selectedPlan={plans.selectedPlan}\n onUpgrade={handleUpgrade}\n />\n </>\n ) : (\n <EmailEntry\n email={emailManagement.email}\n emailError={emailManagement.emailError}\n onEmailChange={emailManagement.setEmail}\n onEmailSubmit={emailManagement.handleEmailSubmit}\n onEmailError={emailManagement.setEmailError}\n />\n )}\n </div>\n </Layout>\n );\n};\n","import { useMemo } from 'react';\n\nexport interface PaymentParams {\n gateway?: string;\n sessionId?: string;\n paymentId?: string;\n reason?: string;\n}\n\nexport const usePaymentParams = (): PaymentParams => {\n return useMemo(() => {\n const params = new URLSearchParams(window.location.search);\n return {\n gateway: params.get('gateway') || undefined,\n sessionId: params.get('session_id') || undefined,\n paymentId: params.get('payment_id') || undefined,\n reason: params.get('reason') || undefined,\n };\n }, []);\n};\n","import { useEffect, useState } from 'react';\nimport { getApiBaseUrl, getHeaders } from '../../api/config';\nimport type { PaymentParams } from './usePaymentParams';\n\ninterface SuccessHookResult {\n loading: boolean;\n error: string | null;\n}\n\nexport const useProcessPaymentSuccess = (params: PaymentParams): SuccessHookResult => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n try {\n const qs = new URLSearchParams({\n ...(params.gateway ? { gateway: params.gateway } : {}),\n ...(params.sessionId ? { session_id: params.sessionId } : {}),\n ...(params.paymentId ? { payment_id: params.paymentId } : {}),\n }).toString();\n\n const url = `${getApiBaseUrl()}/api/payments/success?${qs}`;\n const response = await fetch(url, {\n headers: getHeaders(),\n credentials: 'include',\n });\n\n const contentType = response.headers.get('content-type') || '';\n if (!contentType.includes('application/json')) {\n const text = await response.text();\n throw new Error(`Unexpected response type: ${contentType}. Body: ${text.slice(0, 200)}...`);\n }\n\n const result = await response.json();\n if (!result.success) {\n setError(result.error || 'Failed to process payment');\n }\n } catch (err: any) {\n setError(err?.message || 'Failed to process payment');\n } finally {\n setLoading(false);\n }\n };\n\n run();\n // we only want to run once on mount with initial params\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { loading, error };\n};\n","import React from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { usePaymentParams } from '../hooks/payments/usePaymentParams';\nimport { useProcessPaymentSuccess } from '../hooks/payments/useProcessPaymentSuccess';\nimport PaymentSuccessView from '../components/payments/PaymentSuccessView';\n\nconst PaymentSuccessPage: React.FC = () => {\n const paymentDetails = usePaymentParams();\n const { loading, error } = useProcessPaymentSuccess(paymentDetails);\n\n if (loading) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-green-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">Processing your payment...</p>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n if (error) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"text-red-600 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Payment Processing Error</h2>\n <p className=\"text-red-600 mb-4\">{error}</p>\n <div className=\"space-y-2\">\n <button\n onClick={() => window.location.reload()}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition-colors\"\n >\n Try Again\n </button>\n <button\n onClick={() => window.location.href = '/'}\n className=\"w-full bg-gray-500 hover:bg-gray-600 text-white font-medium py-2 px-4 rounded-md transition-colors\"\n >\n Go Home\n </button>\n </div>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <PaymentSuccessView details={paymentDetails} />\n </div>\n </Layout>\n );\n};\n\nexport default PaymentSuccessPage;\n\n","import { useEffect, useState } from 'react';\nimport { getApiBaseUrl, getHeaders } from '../../api/config';\nimport type { PaymentParams } from './usePaymentParams';\n\ninterface CancelHookResult {\n loading: boolean;\n error: string | null;\n}\n\nexport const useProcessPaymentCancel = (params: PaymentParams): CancelHookResult => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n try {\n const qs = new URLSearchParams({\n ...(params.gateway ? { gateway: params.gateway } : {}),\n ...(params.sessionId ? { session_id: params.sessionId } : {}),\n ...(params.paymentId ? { payment_id: params.paymentId } : {}),\n ...(params.reason ? { reason: params.reason } : {}),\n }).toString();\n\n const url = `${getApiBaseUrl()}/api/payments/cancel?${qs}`;\n await fetch(url, {\n headers: getHeaders(),\n credentials: 'include',\n });\n } catch (err: any) {\n setError(err?.message || 'Failed to process cancellation');\n } finally {\n setLoading(false);\n }\n };\n\n run();\n // run once on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { loading, error };\n};\n","import React from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { usePaymentParams } from '../hooks/payments/usePaymentParams';\nimport { useProcessPaymentCancel } from '../hooks/payments/useProcessPaymentCancel';\nimport PaymentCancelView from '../components/payments/PaymentCancelView';\n\nconst PaymentCancelPage: React.FC = () => {\n const details = usePaymentParams();\n const { loading } = useProcessPaymentCancel(details);\n\n if (loading) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-orange-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">Processing cancellation...</p>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <PaymentCancelView details={details} />\n </div>\n </Layout>\n );\n};\n\nexport default PaymentCancelPage;\n","import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';\nimport { DashboardPage } from './pages/DashboardPage';\nimport PaymentSuccessPage from './pages/PaymentSuccessPage';\nimport PaymentCancelPage from './pages/PaymentCancelPage';\n\nexport const App = function App() {\n return (\n <Router>\n <Routes>\n <Route path=\"/\" element={<Navigate to=\"/dashboard\" replace />} />\n <Route path=\"/dashboard\" element={<DashboardPage />} />\n <Route path=\"/payment-success\" element={<PaymentSuccessPage />} />\n <Route path=\"/payment-cancel\" element={<PaymentCancelPage />} />\n </Routes>\n </Router>\n );\n}\n"]}
|