COME AND CLAIM YOUR GIFT PACK

OR


<div id="order-tracking-app"></div>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel">
const { useState } = React;

function OrderTrackingApp() {
    const [trackingNumber, setTrackingNumber] = useState('');
    const [orderNumber, setOrderNumber] = useState('');
    const [trackingDetails, setTrackingDetails] = useState(null);
    const [error, setError] = useState('');
    const [loading, setLoading] = useState(false);

    const fetchData = async (url) => {
        setLoading(true);
        setError('');
        setTrackingDetails(null);

        const shopUrl = Shopify.shop;
        const fullUrl = `https://${shopUrl}/apps/proxy${url}`;
        
        try {
            const response = await fetch(fullUrl, {
                headers: {
                    'ngrok-skip-browser-warning': '69420',
                    'Accept': 'application/json',
                    'X-Requested-With': 'XMLHttpRequest'
                }
            });
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            const data = await response.json();
            if (data.error) {
                setError(data.error);
            } else {
                setTrackingDetails(data);
            }
        } catch (err) {
            console.error('Fetch error:', err);
            setError('Error fetching information. Please try again.');
        } finally {
            setLoading(false);
        }
    };

    const handleSubmit = async (e, type) => {
        e.preventDefault();
        const value = type === 'tracking' ? trackingNumber : orderNumber;
        if (!value.trim()) {
            setError(`Please enter a valid ${type === 'tracking' ? 'tracking' : 'order'} number.`);
            return;
        }
        const encodedValue = encodeURIComponent(value);
        await fetchData(`/${type === 'tracking' ? 'checkstatus' : 'orderTracking'}/${encodedValue}`);
    };

    return (
        <div className="max-w-2xl mx-auto p-6 bg-gradient-to-r from-blue-50 to-indigo-50 rounded-xl shadow-lg">
            <h1 className="text-4xl font-extrabold text-center text-indigo-800 mb-8">Order Tracking</h1>
            <div className="space-y-6">
                <form onSubmit={(e) => handleSubmit(e, 'tracking')} className="flex flex-col sm:flex-row gap-4">
                    <input 
                        type="text" 
                        value={trackingNumber} 
                        onChange={(e) => setTrackingNumber(e.target.value)}
                        placeholder="Enter Tracking Number"
                        className="flex-1 p-3 border border-indigo-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent"
                    />
                    <button type="submit" className="w-full sm:w-auto bg-indigo-600 text-white px-6 py-3 rounded-lg hover:bg-indigo-700 transition duration-300 ease-in-out transform hover:-translate-y-1">
                        Track by Tracking
                    </button>
                </form>
                <form onSubmit={(e) => handleSubmit(e, 'order')} className="flex flex-col sm:flex-row gap-4">
                    <input 
                        type="text" 
                        value={orderNumber} 
                        onChange={(e) => setOrderNumber(e.target.value)}
                        placeholder="Enter Order Number"
                        className="flex-1 p-3 border border-indigo-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent"
                    />
                    <button type="submit" className="w-full sm:w-auto bg-purple-600 text-white px-6 py-3 rounded-lg hover:bg-purple-700 transition duration-300 ease-in-out transform hover:-translate-y-1">
                        Track by Order
                    </button>
                </form>
            </div>
            {loading && <p className="text-center text-indigo-600 mt-6 animate-pulse">Loading...</p>}
            {error && <p className="text-center text-red-600 mt-6 bg-red-100 p-3 rounded-lg">{error}</p>}
            {trackingDetails && (
                <div className="mt-8 bg-white p-6 rounded-xl shadow-md border border-indigo-100">
                    <h2 className="text-2xl font-bold mb-4 pb-2 border-b-2 border-indigo-200 text-indigo-800">Tracking Details</h2>
                    <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
                        <p><span className="font-semibold text-indigo-700">Status:</span> <span className="bg-indigo-100 text-indigo-800 px-2 py-1 rounded">{trackingDetails.stage}</span></p>
                        <p><span className="font-semibold text-indigo-700">Description:</span> {trackingDetails.description}</p>
                        <p><span className="font-semibold text-indigo-700">Last Updated:</span> {new Date(trackingDetails.time_utc).toLocaleString()}</p>
                        {trackingDetails.tracking_id ? (
                            <p><span className="font-semibold text-indigo-700">Tracking ID:</span> {trackingDetails.tracking_id}</p>
                        ) : (
                            <p><span className="font-semibold text-indigo-700">Order Number:</span> {trackingDetails.order_number}</p>
                        )}
                        <p><span className="font-semibold text-indigo-700">Carrier:</span> {trackingDetails.carrier || 'N/A'}</p>
                        {trackingDetails.tracking_url && (
                            <p className="col-span-full">
                                <span className="font-semibold text-indigo-700">Tracking URL:</span> 
                                <a href={trackingDetails.tracking_url} target="_blank" rel="noopener noreferrer" className="text-blue-500 hover:underline ml-1 inline-flex items-center">
                                    View Detailed Tracking
                                    <svg className="w-4 h-4 ml-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
                                        <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" />
                                    </svg>
                                </a>
                            </p>
                        )}
                    </div>
                </div>
            )}
        </div>
    );
}

ReactDOM.render(<OrderTrackingApp />, document.getElementById('order-tracking-app'));
</script>

GIFT 1

K-POP IDOL PHOTO CARDS

Purchase a character doll of your favorite Kpop star and receive 10 exclusive photo cards of the same Kpop star.

GIFT 2

ROSE RED BALLOON CARD HOLDER KEYCHAIN

Rose red color, can be used as a card holder or keychain; fits ID cards, bus cards, and access cards.

GIFT 3

COLORFUL WOVEN KEYCHAIN

COLORFUL WOVEN KEYCHAIN (PHONE & WATER BOTTLE STRAP)

GIFT 4

BRACELET DIY

The material package allows you to create your own unique connection with Kpop

GIFT 5

MINI EARPHONE CASE

Made of leather, cute and mini, perfect for storing phone, lipstick, or keys; can be used as a bag charm.

GIFT 6

CUTE KOREAN HAIRPIN

Make your head full of cuteness