import React, { useMemo } from 'react'; import { SkeletonText, Tooltip } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { getLocale, InformationIcon } from '@openmrs/esm-framework'; import { useOrderPrice } from '../hooks/useOrderPrice'; import styles from './order-price-details.scss'; interface OrderPriceDetailsComponentProps { orderItemUuid: string; } const OrderPriceDetailsComponent: React.FC = ({ orderItemUuid }) => { const { t } = useTranslation(); const locale = getLocale(); const { data: priceData, isLoading, error } = useOrderPrice(orderItemUuid); const amount = useMemo(() => { if (!priceData || priceData.entry.length === 0) { return null; } return priceData.entry[0].resource.propertyGroup[0]?.priceComponent[0]?.amount; }, [priceData]); const formattedPrice = useMemo((): string => { if (!amount) return ''; try { new Intl.NumberFormat(locale, { style: 'currency', currency: amount.currency, }); return new Intl.NumberFormat(locale, { style: 'currency', currency: amount.currency, minimumFractionDigits: 2, maximumFractionDigits: 2, }).format(amount.value); } catch (error) { console.error(`Invalid currency code: ${amount.currency}. Error: ${error.message}`); return `${new Intl.NumberFormat(locale, { minimumFractionDigits: 2, maximumFractionDigits: 2, }).format(amount.value)} ${amount.currency}`; } }, [locale, amount]); if (isLoading) { return ; } if (!priceData || !amount || error) { return null; } return (
{t('price', 'Price')}: {formattedPrice}
); }; export default OrderPriceDetailsComponent;