import { Component, createMemo, createSignal, For, onMount } from 'solid-js'; import Button from '@src/components/Button'; import styles from './Metabox.module.scss'; import { trackings, courierMap, fetchOrderTrackings, deleteOrderTracking, editOrderTracking, fetchSelectedCouriers, customDomain, lineItems, editingOrderNumber, } from '@src/storages/tracking'; import EditTrackingModal, { FormValue } from '@src/components/EditTrackingModal'; import { Tracking } from '@src/typings/trackings'; const Metabox: Component = () => { const [showModal, setShowModal] = createSignal(false); const [editingTracking, setEditingTracking] = createSignal(); const orderId = window.woocommerce_admin_meta_boxes.post_id; onMount(() => { fetchOrderTrackings(orderId); fetchSelectedCouriers(); }); const handleOk = async (values: FormValue) => { const selectedItems = values.line_items || {}; await editOrderTracking(orderId, { ...values, line_items: Object.entries(selectedItems) .map(([id, quantity]) => ({ id: Number(id), quantity, })) .filter((item) => item.quantity > 0), }); setShowModal(false); setEditingTracking(undefined); await fetchOrderTrackings(orderId); }; const handleCancel = () => { setShowModal(false); setEditingTracking(undefined); }; const handleDelete = async (trackingId: string) => { await deleteOrderTracking(orderId, trackingId); await fetchOrderTrackings(orderId); }; const lineItemsMap = createMemo(() => { const lineItemsMap = new Map(); trackings().forEach((tracking) => { const arr = (tracking.line_items || [])?.map((tl) => { const match = lineItems().find((l) => tl.id === l.id); return { name: match?.name || String(tl.id), quantity: tl.quantity, }; }); lineItemsMap.set(tracking.tracking_id, arr); }); return lineItemsMap; }); const formatTackingLink = (tracking: Tracking) => { return /^https?:\/\//.test(customDomain()) ? `${customDomain()}/${tracking.slug}/${tracking.tracking_number}` : `https://${customDomain()}/${tracking.slug}/${tracking.tracking_number}`; }; return (
{/* trackings */}
{(tracking, index) => ( )}
{/* add button */}
); }; export default Metabox;