refactor: abstract site URL across email templates

- Add NEXT_PUBLIC_SITE_URL to .env.local
- Update email templates to accept siteUrl prop
- Update webhook handler to pass siteUrl from env var
- Update create-webhooks.graphql with placeholder URL
This commit is contained in:
Unchained
2026-03-25 10:33:03 +02:00
parent b8b3a57e6f
commit 4fcd4b3ba8
7 changed files with 36 additions and 13 deletions

View File

@@ -6,6 +6,8 @@ import { OrderShipped } from "@/emails/OrderShipped";
import { OrderCancelled } from "@/emails/OrderCancelled";
import { OrderPaid } from "@/emails/OrderPaid";
const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || "https://dev.manoonoils.com";
interface SaleorWebhookHeaders {
"saleor-event": string;
"saleor-domain": string;
@@ -159,6 +161,7 @@ async function handleOrderConfirmed(order: SaleorOrder) {
items: parseOrderItems(order.lines, currency),
total: formatPrice(order.total.gross.amount, currency),
shippingAddress: formatAddress(order.shippingAddress),
siteUrl: SITE_URL,
}),
language,
idempotencyKey: `order-confirmed/${order.id}`,
@@ -175,6 +178,7 @@ async function handleOrderConfirmed(order: SaleorOrder) {
items: parseOrderItems(order.lines, currency),
total: formatPrice(order.total.gross.amount, currency),
shippingAddress: formatAddress(order.shippingAddress),
siteUrl: SITE_URL,
}),
eventType: "ORDER_CONFIRMED",
orderId: order.id,
@@ -219,6 +223,7 @@ async function handleOrderFulfilled(order: SaleorOrder) {
items: parseOrderItems(order.lines, currency),
trackingNumber,
trackingUrl,
siteUrl: SITE_URL,
}),
language,
idempotencyKey: `order-fulfilled/${order.id}`,
@@ -234,6 +239,7 @@ async function handleOrderFulfilled(order: SaleorOrder) {
items: parseOrderItems(order.lines, currency),
trackingNumber,
trackingUrl,
siteUrl: SITE_URL,
}),
eventType: "ORDER_FULFILLED",
orderId: order.id,
@@ -272,6 +278,7 @@ async function handleOrderCancelled(order: SaleorOrder) {
items: parseOrderItems(order.lines, currency),
total: formatPrice(order.total.gross.amount, currency),
reason,
siteUrl: SITE_URL,
}),
language,
idempotencyKey: `order-cancelled/${order.id}`,
@@ -287,6 +294,7 @@ async function handleOrderCancelled(order: SaleorOrder) {
items: parseOrderItems(order.lines, currency),
total: formatPrice(order.total.gross.amount, currency),
reason,
siteUrl: SITE_URL,
}),
eventType: "ORDER_CANCELLED",
orderId: order.id,
@@ -316,6 +324,7 @@ async function handleOrderFullyPaid(order: SaleorOrder) {
customerName,
items: parseOrderItems(order.lines, currency),
total: formatPrice(order.total.gross.amount, currency),
siteUrl: SITE_URL,
}),
language,
idempotencyKey: `order-paid/${order.id}`,
@@ -330,6 +339,7 @@ async function handleOrderFullyPaid(order: SaleorOrder) {
customerName,
items: parseOrderItems(order.lines, currency),
total: formatPrice(order.total.gross.amount, currency),
siteUrl: SITE_URL,
}),
eventType: "ORDER_FULLY_PAID",
orderId: order.id,