import { useEffect, useState } from 'react' import { __ } from '@wordpress/i18n' import apiFetch from '@wordpress/api-fetch' import classNames from 'classnames' import { Loading } from '../../../components/Loading/Loading' import { GiftCardPublicStatus, GiftCardStatusProps } from './types' import './GiftCardStatus.scss' export const GiftCardStatus = ({ giftCardId }: GiftCardStatusProps) => { const [status, setStatus] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { let cancelled = false const id = Number(giftCardId) if (!Number.isFinite(id) || id <= 0) { setLoading(false) setError(__('Gift card not found.', 'webba-booking-lite')) return } setLoading(true) setError(null) apiFetch<{ success?: boolean gift_card?: GiftCardPublicStatus message?: string }>({ path: `/wbk/v2/gift-card-status/?id=${id}`, }) .then((result) => { if (cancelled) { return } if (!result?.success || !result.gift_card) { setError( result?.message || __('Gift card not found.', 'webba-booking-lite') ) setStatus(null) return } setStatus(result.gift_card) }) .catch(() => { if (!cancelled) { setError( __('Gift card not found.', 'webba-booking-lite') ) setStatus(null) } }) .finally(() => { if (!cancelled) { setLoading(false) } }) return () => { cancelled = true } }, [giftCardId]) return (
{loading && } {!loading && error && (

{error}

)} {!loading && status && ( <>

{__('Gift card', 'webba-booking-lite')}

{status.active ? __('Active', 'webba-booking-lite') : __('Expired', 'webba-booking-lite')}

{__('Remaining balance', 'webba-booking-lite')}

{status.remaining_formatted}

{__('Code', 'webba-booking-lite')}
{status.code}
{__('Original amount', 'webba-booking-lite')}
{status.amount_formatted}
{status.expiration_label !== '' && (
{__('Valid until', 'webba-booking-lite')}
{status.expiration_label}
)}
)}
) }