@shoppexio/storefront-react 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -160,7 +160,7 @@ function readCouponPayment(value: unknown): BillingHistoryInvoice['coupon_paymen
160
160
  return { code, payment, payments_total: paymentsTotal };
161
161
  }
162
162
 
163
- /** What a billing history row billed (Design Batch 9, C3), as a catalog key: "Renewal", "First order", "Plan change, Basic to Pro". */
163
+ /** What a billing history row billed (Design Batch 9, C3), as a catalog key: "Renewal", "First order", "Plan change · Basic to Pro". */
164
164
  export function billingEntryTitle(invoice: BillingHistoryInvoice): { key: string; params?: { from: string; to: string } } {
165
165
  if (invoice.plan_change) {
166
166
  return { key: 'subscriptions.historyPlanChange', params: { from: invoice.plan_change.from_plan_name, to: invoice.plan_change.to_plan_name } };
@@ -168,7 +168,7 @@ export function billingEntryTitle(invoice: BillingHistoryInvoice): { key: string
168
168
  return { key: invoice.kind === 'first_order' ? 'subscriptions.historyFirstOrder' : 'subscriptions.historyRenewal' };
169
169
  }
170
170
 
171
- /** "for 12 of 30 days" beside a plan change's date, or null when there is nothing to count. */
171
+ /** "12 of 30 days" beside a plan change's date, or null when there is nothing to count. */
172
172
  export function billingEntryDays(invoice: BillingHistoryInvoice): { key: string; params: { days: number; total: number } } | null {
173
173
  const change = invoice.plan_change;
174
174
  if (!change || change.days_left === null || change.days_total === null) return null;
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "تقييم",
185
185
  "nothingToDownload": "تم التسليم {date}. سلّمك البائع هذا مباشرةً، لذلك لا يوجد ما يمكن تنزيله.",
186
186
  "detailError": "تعذّر تحميل الطلب {id}",
187
+ "detailErrorBody": "طلبك في أمان. تحقق من اتصالك وحاول مرة أخرى.",
187
188
  "noReceiptUnpaid": "لم يُدفع هذا الطلب قط، لذلك لا يوجد له إيصال.",
188
189
  "noReceiptVoided": "ألغى المتجر هذا الطلب، لذلك لا يوجد له إيصال.",
189
190
  "pdfSignedOut": "تم تسجيل خروجك. سجّل الدخول مرة أخرى لتنزيل الإيصال.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "حدّث بطاقتك للحفاظ على هذا الاشتراك. تُفتح صفحة Shoppex آمنة.",
365
366
  "historyFirstOrder": "الطلب الأول",
366
367
  "historyRenewal": "تجديد",
367
- "historyPlanChange": "تغيير الخطة، من {from} إلى {to}",
368
- "historyDays": "عن {days} من {total} يومًا",
368
+ "historyPlanChange": "تغيير الخطة · من {from} إلى {to}",
369
+ "historyDays": "{days} من {total} يومًا",
369
370
  "historyCouponPayment": "{code} · {payment} من {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Bewertung",
185
185
  "nothingToDownload": "Geliefert {date}. Der Verkäufer hat dir das direkt gegeben, deshalb gibt es nichts herunterzuladen.",
186
186
  "detailError": "Bestellung {id} konnte nicht geladen werden",
187
+ "detailErrorBody": "Deine Bestellung ist sicher. Prüfe deine Verbindung und versuche es erneut.",
187
188
  "noReceiptUnpaid": "Diese Bestellung wurde nie bezahlt, deshalb gibt es keine Quittung.",
188
189
  "noReceiptVoided": "Der Shop hat diese Bestellung storniert, deshalb gibt es keine Quittung.",
189
190
  "pdfSignedOut": "Du wurdest abgemeldet. Melde dich erneut an, um die Quittung herunterzuladen.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Aktualisiere deine Karte, damit dein Abo weiterläuft. Öffnet eine sichere Shoppex-Seite.",
365
366
  "historyFirstOrder": "Erstbestellung",
366
367
  "historyRenewal": "Verlängerung",
367
- "historyPlanChange": "Tarifwechsel, {from} zu {to}",
368
- "historyDays": "für {days} von {total} Tagen",
368
+ "historyPlanChange": "Tarifwechsel · {from} zu {to}",
369
+ "historyDays": "{days} von {total} Tagen",
369
370
  "historyCouponPayment": "{code} · {payment} von {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Review",
185
185
  "nothingToDownload": "Delivered {date}. The seller gave this to you directly, so there's nothing to download.",
186
186
  "detailError": "Couldn't load order {id}",
187
+ "detailErrorBody": "Your order is safe. Check your connection and try again.",
187
188
  "noReceiptUnpaid": "This order was never paid, so it has no receipt.",
188
189
  "noReceiptVoided": "The shop cancelled this order, so it has no receipt.",
189
190
  "pdfSignedOut": "You were signed out. Sign in again to download the receipt.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Update your card to keep this subscription. Opens a secure Shoppex page.",
365
366
  "historyFirstOrder": "First order",
366
367
  "historyRenewal": "Renewal",
367
- "historyPlanChange": "Plan change, {from} to {to}",
368
- "historyDays": "for {days} of {total} days",
368
+ "historyPlanChange": "Plan change · {from} to {to}",
369
+ "historyDays": "{days} of {total} days",
369
370
  "historyCouponPayment": "{code} · {payment} of {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Reseña",
185
185
  "nothingToDownload": "Entregado {date}. El vendedor te lo dio directamente, así que no hay nada que descargar.",
186
186
  "detailError": "No se pudo cargar el pedido {id}",
187
+ "detailErrorBody": "Tu pedido está a salvo. Comprueba tu conexión e inténtalo de nuevo.",
187
188
  "noReceiptUnpaid": "Este pedido nunca se pagó, así que no tiene recibo.",
188
189
  "noReceiptVoided": "La tienda canceló este pedido, así que no tiene recibo.",
189
190
  "pdfSignedOut": "Se cerró tu sesión. Inicia sesión de nuevo para descargar el recibo.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Actualiza tu tarjeta para mantener esta suscripción. Abre una página segura de Shoppex.",
365
366
  "historyFirstOrder": "Primer pedido",
366
367
  "historyRenewal": "Renovación",
367
- "historyPlanChange": "Cambio de plan, de {from} a {to}",
368
- "historyDays": "por {days} de {total} días",
368
+ "historyPlanChange": "Cambio de plan · de {from} a {to}",
369
+ "historyDays": "{days} de {total} días",
369
370
  "historyCouponPayment": "{code} · {payment} de {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Arvostelu",
185
185
  "nothingToDownload": "Toimitettu {date}. Myyjä antoi tämän sinulle suoraan, joten ladattavaa ei ole.",
186
186
  "detailError": "Tilausta {id} ei voitu ladata",
187
+ "detailErrorBody": "Tilauksesi on tallessa. Tarkista yhteys ja yritä uudelleen.",
187
188
  "noReceiptUnpaid": "Tätä tilausta ei koskaan maksettu, joten sillä ei ole kuittia.",
188
189
  "noReceiptVoided": "Kauppa peruutti tämän tilauksen, joten sillä ei ole kuittia.",
189
190
  "pdfSignedOut": "Sinut kirjattiin ulos. Kirjaudu uudelleen ladataksesi kuitin.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Päivitä korttisi, jotta tilaus pysyy voimassa. Avaa suojatun Shoppex-sivun.",
365
366
  "historyFirstOrder": "Ensimmäinen tilaus",
366
367
  "historyRenewal": "Uusinta",
367
- "historyPlanChange": "Sopimuksen vaihto, {from} → {to}",
368
- "historyDays": "{days}/{total} päivältä",
368
+ "historyPlanChange": "Sopimuksen vaihto · {from} → {to}",
369
+ "historyDays": "{days}/{total} päivää",
369
370
  "historyCouponPayment": "{code} · {payment}/{total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Avis",
185
185
  "nothingToDownload": "Livré le {date}. Le vendeur vous l'a remis directement, il n'y a donc rien à télécharger.",
186
186
  "detailError": "Impossible de charger la commande {id}",
187
+ "detailErrorBody": "Votre commande est en sécurité. Vérifiez votre connexion et réessayez.",
187
188
  "noReceiptUnpaid": "Cette commande n'a jamais été payée, elle n'a donc pas de reçu.",
188
189
  "noReceiptVoided": "La boutique a annulé cette commande, elle n'a donc pas de reçu.",
189
190
  "pdfSignedOut": "Vous avez été déconnecté. Reconnectez-vous pour télécharger le reçu.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Mettez à jour votre carte pour conserver cet abonnement. Ouvre une page Shoppex sécurisée.",
365
366
  "historyFirstOrder": "Première commande",
366
367
  "historyRenewal": "Renouvellement",
367
- "historyPlanChange": "Changement de formule, de {from} à {to}",
368
- "historyDays": "pour {days} jours sur {total}",
368
+ "historyPlanChange": "Changement de formule · de {from} à {to}",
369
+ "historyDays": "{days} jours sur {total}",
369
370
  "historyCouponPayment": "{code} · {payment} sur {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "समीक्षा",
185
185
  "nothingToDownload": "{date} को डिलीवर हुआ। विक्रेता ने यह आपको सीधे दिया है, इसलिए डाउनलोड करने के लिए कुछ नहीं है।",
186
186
  "detailError": "ऑर्डर {id} लोड नहीं हो सका",
187
+ "detailErrorBody": "आपका ऑर्डर सुरक्षित है। अपना कनेक्शन जांचें और फिर से कोशिश करें।",
187
188
  "noReceiptUnpaid": "इस ऑर्डर का कभी भुगतान नहीं हुआ, इसलिए इसकी कोई रसीद नहीं है।",
188
189
  "noReceiptVoided": "दुकान ने यह ऑर्डर रद्द कर दिया, इसलिए इसकी कोई रसीद नहीं है।",
189
190
  "pdfSignedOut": "आप साइन आउट हो गए। रसीद डाउनलोड करने के लिए फिर से साइन इन करें।",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "यह सब्सक्रिप्शन बनाए रखने के लिए अपना कार्ड अपडेट करें। एक सुरक्षित Shoppex पेज खुलता है।",
365
366
  "historyFirstOrder": "पहला ऑर्डर",
366
367
  "historyRenewal": "नवीनीकरण",
367
- "historyPlanChange": "योजना बदलाव, {from} से {to}",
368
- "historyDays": "{total} में से {days} दिनों के लिए",
368
+ "historyPlanChange": "योजना बदलाव · {from} से {to}",
369
+ "historyDays": "{total} में से {days} दिन",
369
370
  "historyCouponPayment": "{code} · {total} में से {payment}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Recensione",
185
185
  "nothingToDownload": "Consegnato il {date}. Il venditore te l'ha dato direttamente, quindi non c'è nulla da scaricare.",
186
186
  "detailError": "Impossibile caricare l'ordine {id}",
187
+ "detailErrorBody": "Il tuo ordine è al sicuro. Controlla la connessione e riprova.",
187
188
  "noReceiptUnpaid": "Questo ordine non è mai stato pagato, quindi non ha una ricevuta.",
188
189
  "noReceiptVoided": "Il negozio ha annullato questo ordine, quindi non ha una ricevuta.",
189
190
  "pdfSignedOut": "Sei stato disconnesso. Accedi di nuovo per scaricare la ricevuta.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Aggiorna la tua carta per mantenere questo abbonamento. Apre una pagina Shoppex sicura.",
365
366
  "historyFirstOrder": "Primo ordine",
366
367
  "historyRenewal": "Rinnovo",
367
- "historyPlanChange": "Cambio piano, da {from} a {to}",
368
- "historyDays": "per {days} giorni su {total}",
368
+ "historyPlanChange": "Cambio piano · da {from} a {to}",
369
+ "historyDays": "{days} giorni su {total}",
369
370
  "historyCouponPayment": "{code} · {payment} di {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Atsiliepimas",
185
185
  "nothingToDownload": "Pristatyta {date}. Pardavėjas tai perdavė jums tiesiogiai, todėl nėra ko atsisiųsti.",
186
186
  "detailError": "Nepavyko įkelti užsakymo {id}",
187
+ "detailErrorBody": "Jūsų užsakymas saugus. Patikrinkite ryšį ir bandykite dar kartą.",
187
188
  "noReceiptUnpaid": "Šis užsakymas niekada nebuvo apmokėtas, todėl kvito nėra.",
188
189
  "noReceiptVoided": "Parduotuvė atšaukė šį užsakymą, todėl kvito nėra.",
189
190
  "pdfSignedOut": "Jūs buvote atjungti. Prisijunkite dar kartą, kad atsisiųstumėte kvitą.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Atnaujinkite kortelę, kad prenumerata liktų galioti. Atidaromas saugus Shoppex puslapis.",
365
366
  "historyFirstOrder": "Pirmas užsakymas",
366
367
  "historyRenewal": "Atnaujinimas",
367
- "historyPlanChange": "Plano keitimas, {from} → {to}",
368
- "historyDays": "už {days} iš {total} d.",
368
+ "historyPlanChange": "Plano keitimas · {from} → {to}",
369
+ "historyDays": "{days} iš {total} d.",
369
370
  "historyCouponPayment": "{code} · {payment} iš {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Review",
185
185
  "nothingToDownload": "Geleverd op {date}. De verkoper heeft dit rechtstreeks aan je gegeven, dus er is niets te downloaden.",
186
186
  "detailError": "Bestelling {id} kon niet worden geladen",
187
+ "detailErrorBody": "Je bestelling is veilig. Controleer je verbinding en probeer het opnieuw.",
187
188
  "noReceiptUnpaid": "Deze bestelling is nooit betaald, dus er is geen bon.",
188
189
  "noReceiptVoided": "De winkel heeft deze bestelling geannuleerd, dus er is geen bon.",
189
190
  "pdfSignedOut": "Je bent uitgelogd. Log opnieuw in om de bon te downloaden.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Werk je kaart bij om dit abonnement te behouden. Opent een beveiligde Shoppex-pagina.",
365
366
  "historyFirstOrder": "Eerste bestelling",
366
367
  "historyRenewal": "Verlenging",
367
- "historyPlanChange": "Pakketwijziging, van {from} naar {to}",
368
- "historyDays": "voor {days} van {total} dagen",
368
+ "historyPlanChange": "Pakketwijziging · van {from} naar {to}",
369
+ "historyDays": "{days} van {total} dagen",
369
370
  "historyCouponPayment": "{code} · {payment} van {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Opinia",
185
185
  "nothingToDownload": "Dostarczono {date}. Sprzedawca przekazał Ci to bezpośrednio, więc nie ma nic do pobrania.",
186
186
  "detailError": "Nie udało się wczytać zamówienia {id}",
187
+ "detailErrorBody": "Twoje zamówienie jest bezpieczne. Sprawdź połączenie i spróbuj ponownie.",
187
188
  "noReceiptUnpaid": "To zamówienie nigdy nie zostało opłacone, więc nie ma potwierdzenia.",
188
189
  "noReceiptVoided": "Sklep anulował to zamówienie, więc nie ma potwierdzenia.",
189
190
  "pdfSignedOut": "Wylogowano Cię. Zaloguj się ponownie, aby pobrać potwierdzenie.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Zaktualizuj kartę, aby zachować tę subskrypcję. Otwiera bezpieczną stronę Shoppex.",
365
366
  "historyFirstOrder": "Pierwsze zamówienie",
366
367
  "historyRenewal": "Odnowienie",
367
- "historyPlanChange": "Zmiana planu, z {from} na {to}",
368
- "historyDays": "za {days} z {total} dni",
368
+ "historyPlanChange": "Zmiana planu · z {from} na {to}",
369
+ "historyDays": "{days} z {total} dni",
369
370
  "historyCouponPayment": "{code} · {payment} z {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Avaliação",
185
185
  "nothingToDownload": "Entregue a {date}. O vendedor entregou-lhe isto diretamente, por isso não há nada para transferir.",
186
186
  "detailError": "Não foi possível carregar a encomenda {id}",
187
+ "detailErrorBody": "A sua encomenda está segura. Verifique a sua ligação e tente novamente.",
187
188
  "noReceiptUnpaid": "Esta encomenda nunca foi paga, por isso não tem recibo.",
188
189
  "noReceiptVoided": "A loja cancelou esta encomenda, por isso não tem recibo.",
189
190
  "pdfSignedOut": "A sua sessão terminou. Inicie sessão novamente para transferir o recibo.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Atualize o seu cartão para manter esta subscrição. Abre uma página segura da Shoppex.",
365
366
  "historyFirstOrder": "Primeiro pedido",
366
367
  "historyRenewal": "Renovação",
367
- "historyPlanChange": "Mudança de plano, de {from} para {to}",
368
- "historyDays": "por {days} de {total} dias",
368
+ "historyPlanChange": "Mudança de plano · de {from} para {to}",
369
+ "historyDays": "{days} de {total} dias",
369
370
  "historyCouponPayment": "{code} · {payment} de {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Отзыв",
185
185
  "nothingToDownload": "Доставлено {date}. Продавец передал это вам напрямую, поэтому скачивать нечего.",
186
186
  "detailError": "Не удалось загрузить заказ {id}",
187
+ "detailErrorBody": "Ваш заказ в безопасности. Проверьте подключение и попробуйте снова.",
187
188
  "noReceiptUnpaid": "Этот заказ так и не был оплачен, поэтому чека нет.",
188
189
  "noReceiptVoided": "Магазин отменил этот заказ, поэтому чека нет.",
189
190
  "pdfSignedOut": "Вы вышли из аккаунта. Войдите снова, чтобы скачать чек.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Обновите карту, чтобы сохранить подписку. Откроется защищённая страница Shoppex.",
365
366
  "historyFirstOrder": "Первый заказ",
366
367
  "historyRenewal": "Продление",
367
- "historyPlanChange": "Смена тарифа: {from} на {to}",
368
- "historyDays": "за {days} из {total} дн.",
368
+ "historyPlanChange": "Смена тарифа · {from} на {to}",
369
+ "historyDays": "{days} из {total} дн.",
369
370
  "historyCouponPayment": "{code} · {payment} из {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Değerlendirme",
185
185
  "nothingToDownload": "Teslim edildi: {date}. Satıcı bunu sana doğrudan verdi, bu yüzden indirilecek bir şey yok.",
186
186
  "detailError": "{id} siparişi yüklenemedi",
187
+ "detailErrorBody": "Siparişin güvende. Bağlantını kontrol edip tekrar dene.",
187
188
  "noReceiptUnpaid": "Bu sipariş hiç ödenmedi, bu yüzden makbuzu yok.",
188
189
  "noReceiptVoided": "Mağaza bu siparişi iptal etti, bu yüzden makbuzu yok.",
189
190
  "pdfSignedOut": "Oturumun kapandı. Makbuzu indirmek için tekrar giriş yap.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Bu aboneliği korumak için kartınızı güncelleyin. Güvenli bir Shoppex sayfası açılır.",
365
366
  "historyFirstOrder": "İlk sipariş",
366
367
  "historyRenewal": "Yenileme",
367
- "historyPlanChange": "Plan değişikliği, {from} → {to}",
368
- "historyDays": "{total} günün {days} günü için",
368
+ "historyPlanChange": "Plan değişikliği · {from} → {to}",
369
+ "historyDays": "{total} günün {days} günü",
369
370
  "historyCouponPayment": "{code} · {payment}/{total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "Відгук",
185
185
  "nothingToDownload": "Доставлено {date}. Продавець передав це вам напряму, тож завантажувати нічого.",
186
186
  "detailError": "Не вдалося завантажити замовлення {id}",
187
+ "detailErrorBody": "Ваше замовлення в безпеці. Перевірте з’єднання та спробуйте ще раз.",
187
188
  "noReceiptUnpaid": "Це замовлення так і не було оплачене, тому квитанції немає.",
188
189
  "noReceiptVoided": "Магазин скасував це замовлення, тому квитанції немає.",
189
190
  "pdfSignedOut": "Ви вийшли з акаунта. Увійдіть знову, щоб завантажити квитанцію.",
@@ -364,8 +365,8 @@
364
365
  "pastDueCardBody": "Оновіть картку, щоб зберегти підписку. Відкриється захищена сторінка Shoppex.",
365
366
  "historyFirstOrder": "Перше замовлення",
366
367
  "historyRenewal": "Продовження",
367
- "historyPlanChange": "Зміна тарифу: {from} на {to}",
368
- "historyDays": "за {days} з {total} дн.",
368
+ "historyPlanChange": "Зміна тарифу · {from} на {to}",
369
+ "historyDays": "{days} з {total} дн.",
369
370
  "historyCouponPayment": "{code} · {payment} з {total}"
370
371
  },
371
372
  "favorites": {
@@ -184,6 +184,7 @@
184
184
  "reviewFallbackLabel": "评价",
185
185
  "nothingToDownload": "已交付:{date}。卖家已直接交给你,因此没有可下载的内容。",
186
186
  "detailError": "无法加载订单 {id}",
187
+ "detailErrorBody": "你的订单很安全。请检查网络连接后重试。",
187
188
  "noReceiptUnpaid": "此订单从未付款,因此没有收据。",
188
189
  "noReceiptVoided": "商家已取消此订单,因此没有收据。",
189
190
  "pdfSignedOut": "你已退出登录。请重新登录以下载收据。",
@@ -364,7 +365,7 @@
364
365
  "pastDueCardBody": "请更新银行卡以保留此订阅。将打开一个安全的 Shoppex 页面。",
365
366
  "historyFirstOrder": "首次订单",
366
367
  "historyRenewal": "续订",
367
- "historyPlanChange": "套餐变更:{from} 改为 {to}",
368
+ "historyPlanChange": "套餐变更 · {from} 改为 {to}",
368
369
  "historyDays": "{total} 天中的 {days} 天",
369
370
  "historyCouponPayment": "{code} · 第 {payment}/{total} 次"
370
371
  },
@@ -325,12 +325,20 @@ export function waitingStockNotice(order: Pick<SdkCustomerOrderDetail, 'status'
325
325
  return `${t('orders.waitingStock.title')} ${body}`;
326
326
  }
327
327
 
328
- /** A line of a held order waits for the restock; "Pending" would read as unpaid (C1). */
328
+ /**
329
+ * The chip of one line. A line of a held order waits for the restock; "Pending"
330
+ * would read as unpaid (C1). A line of an expired or cancelled order will never
331
+ * be delivered, so its untouched PENDING gets no chip at all (C7, N-5): the
332
+ * order notice says what became of the order.
333
+ */
329
334
  export function lineDeliveryChipStatus(
330
335
  orderStatus: string,
331
336
  line: Pick<SdkCustomerOrderDetail['lineItems'][number], 'deliveryStatus'>,
332
- ): string {
333
- return orderStatus === 'AWAITING_STOCK' && line.deliveryStatus === 'PENDING' ? 'WAITING' : line.deliveryStatus;
337
+ ): string | null {
338
+ if (line.deliveryStatus !== 'PENDING') return line.deliveryStatus;
339
+ if (orderStatus === 'AWAITING_STOCK') return 'WAITING';
340
+ if (orderStatus === 'EXPIRED' || orderStatus === 'VOIDED') return null;
341
+ return line.deliveryStatus;
334
342
  }
335
343
 
336
344
  /**
@@ -370,7 +378,7 @@ export function AccountOrderDetail({ orderId }: { orderId: string }) {
370
378
  <AccountSectionTitle>{t('orders.detailError', { id: orderId })}</AccountSectionTitle>
371
379
  </div>
372
380
  <div className="sxa:mt-4">
373
- <AccountError message={state.message} onRetry={reload} />
381
+ <AccountError message={t('orders.detailErrorBody')} onRetry={reload} />
374
382
  </div>
375
383
  </div>
376
384
  );
@@ -438,11 +446,10 @@ export function AccountOrderDetail({ orderId }: { orderId: string }) {
438
446
  independent of payment: a completed, fully paid invoice can
439
447
  still carry a line that never reached the buyer. This chip is
440
448
  the only thing on the page that says so, which is why it is
441
- rendered for every line rather than only for the unhappy ones.
449
+ rendered for every line rather than only for the unhappy ones
450
+ (except a line an expired or cancelled order never started).
442
451
  */}
443
- <p className="sxa:mt-1.5">
444
- <DeliveryChip status={lineDeliveryChipStatus(order.status, item)} />
445
- </p>
452
+ <LineDeliveryChip status={lineDeliveryChipStatus(order.status, item)} />
446
453
  </div>
447
454
  </div>
448
455
 
@@ -891,6 +898,15 @@ function SummaryRow({
891
898
  * a blank or a guess. `FAILED` reads "Delivery failed" — a buyer looking at a
892
899
  * completed invoice has to be able to see that one of its lines never arrived.
893
900
  */
901
+ function LineDeliveryChip({ status }: { status: string | null }) {
902
+ if (status === null) return null;
903
+ return (
904
+ <p className="sxa:mt-1.5">
905
+ <DeliveryChip status={status} />
906
+ </p>
907
+ );
908
+ }
909
+
894
910
  function DeliveryChip({ status }: { status: string }) {
895
911
  const normalized = status.trim().toUpperCase();
896
912
  const tone = normalized === 'DELIVERED'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shoppexio/storefront-react",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "React hooks, models and a customer account for Shoppex code storefronts",
5
5
  "type": "module",
6
6
  "homepage": "https://docs.shoppex.io/storefront/code-storefront-development",