Dynamic AGB address, real shipping costs on /versand instead of hardcoded constants
- AGB: name/address/email now come from company-settings via new VertragspartnerBlock (mid-document, see LegalPages.ts's contentPart2). - VersandSections/VersandModal/CartContent/CheckoutContent/versand page: shipping cost and free-shipping threshold now come from the real ShippingMethods data (already fetched elsewhere for checkout), not the hardcoded lib/shipping.ts constants — those had already drifted from the real Payload values once. lib/shipping.ts deleted, nothing left to export. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import Link from "next/link";
|
||||
import { SHIPPING_COST, FREE_SHIPPING_THRESHOLD } from "../../lib/shipping";
|
||||
import { formatPrice } from "../../lib/format";
|
||||
import type { ShippingSettings } from "../../lib/payload";
|
||||
|
||||
@@ -49,9 +48,21 @@ function Section({
|
||||
export function VersandSections({
|
||||
withAnchors = false,
|
||||
shipping,
|
||||
shippingCost,
|
||||
freeShippingThreshold,
|
||||
}: {
|
||||
withAnchors?: boolean;
|
||||
shipping: ShippingSettings;
|
||||
/** Price of the default (first active, i.e. Standard) ShippingMethod —
|
||||
* same value/estimate CartContent.tsx already computes for its own
|
||||
* order-summary line, threaded down here instead of this component
|
||||
* having its own hardcoded lib/shipping.ts constant, which is exactly
|
||||
* what let this text drift from the real Payload ShippingMethods price
|
||||
* (see lib/shipping.ts's own comment on this). */
|
||||
shippingCost: number;
|
||||
/** Lowest freeShippingThreshold among active ShippingMethods, or null if
|
||||
* none has one — same rule CartContent.tsx/getTrustBadges() already use. */
|
||||
freeShippingThreshold: number | null;
|
||||
}) {
|
||||
return (
|
||||
<div className="flex flex-col gap-10 items-start w-full">
|
||||
@@ -72,9 +83,9 @@ export function VersandSections({
|
||||
|
||||
<Section id="versandkosten" title="Versandkosten" withAnchor={withAnchors}>
|
||||
<p>
|
||||
Die Versandkosten innerhalb Deutschlands betragen pauschal {formatPrice(SHIPPING_COST)}{" "}
|
||||
pro Bestellung. Ab einem Bestellwert von {formatPrice(FREE_SHIPPING_THRESHOLD)} versenden
|
||||
wir kostenlos.
|
||||
Die Versandkosten innerhalb Deutschlands betragen pauschal {formatPrice(shippingCost)}{" "}
|
||||
pro Bestellung.
|
||||
{freeShippingThreshold !== null && ` Ab einem Bestellwert von ${formatPrice(freeShippingThreshold)} versenden wir kostenlos.`}
|
||||
</p>
|
||||
<p>Alle angegebenen Preise verstehen sich inklusive der gesetzlichen Mehrwertsteuer.</p>
|
||||
<p>
|
||||
|
||||
@@ -4,7 +4,7 @@ import { Reveal } from "../components/Reveal";
|
||||
import { Footer } from "../components/Footer";
|
||||
import { VersandSections } from "./components/VersandSections";
|
||||
import { VersandTOC, MobileVersandTOC } from "./components/VersandTOC";
|
||||
import { getShippingSettings } from "../lib/payload";
|
||||
import { getShippingSettings, getShippingMethods } from "../lib/payload";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Versand",
|
||||
@@ -14,7 +14,12 @@ export const metadata: Metadata = {
|
||||
};
|
||||
|
||||
export default async function VersandPage() {
|
||||
const shipping = await getShippingSettings();
|
||||
const [shipping, shippingMethods] = await Promise.all([getShippingSettings(), getShippingMethods()]);
|
||||
// Same "first active method / lowest threshold among active methods"
|
||||
// convention as CartContent.tsx/getTrustBadges() — see VersandSections.tsx.
|
||||
const shippingCost = shippingMethods[0]?.price ?? 0;
|
||||
const shippingMethodThresholds = shippingMethods.map((m) => m.freeShippingThreshold).filter((t): t is number => t !== null);
|
||||
const freeShippingThreshold = shippingMethodThresholds.length > 0 ? Math.min(...shippingMethodThresholds) : null;
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -47,7 +52,7 @@ export default async function VersandPage() {
|
||||
<VersandTOC />
|
||||
</div>
|
||||
<div className="w-full lg:flex-1 max-w-[45rem]">
|
||||
<VersandSections withAnchors shipping={shipping} />
|
||||
<VersandSections withAnchors shipping={shipping} shippingCost={shippingCost} freeShippingThreshold={freeShippingThreshold} />
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
Reference in New Issue
Block a user