Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 2x 10x 10x 10x 20x 19x 11x 19x 11x 2x 11x 11x 10x 2x 2x | import type {
ConversionItem,
ConversionColumnData,
} from '../components/conversion-rate-card';
import { apiClient } from '@/lib/http-client';
import type { ConversionCategory } from '@/constants/dashboard';
import { DASHBOARD_API_ENDPOINTS } from '@/constants/dashboard';
// Conversion Rate API response type from Strapi
interface ConversionRateApiResponse {
id: number;
documentId: string;
currency: string;
rate: string;
category: ConversionCategory;
type: string;
isActive: boolean;
createdAt: string;
updatedAt: string;
publishedAt: string;
locale: string;
}
// Transform API response to ConversionColumnData
const transformApiResponse = (
apiData: ConversionRateApiResponse[]
): ConversionColumnData[] => {
console.log('Transforming Conversion Rate API response:', apiData);
// Group by category
const groupedData: Record<string, ConversionItem[]> = {};
apiData
.filter(item => item.isActive) // Only include active conversion rates
.forEach(item => {
if (!groupedData[item.category]) {
groupedData[item.category] = [];
}
groupedData[item.category].push({
currency: item.currency,
rate: item.rate,
});
});
// Convert grouped data to ConversionColumnData format
return Object.entries(groupedData).map(([category, items]) => ({
title: category,
items: items,
}));
};
// Fetch all conversion rates
export const fetchConversionRates = async (): Promise<
ConversionColumnData[]
> => {
try {
const response = await apiClient.get(
DASHBOARD_API_ENDPOINTS.CONVERSION_RATES
);
return transformApiResponse(response || []);
} catch (error) {
console.error('Failed to fetch conversion rates:', error);
throw new Error(
error instanceof Error
? error.message
: 'Failed to load conversion rate data'
);
}
};
|