feat(housekeeping): deliver economy vertical
CI / check (pull_request) Successful in 40s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped

This commit is contained in:
Simo committed 2026-08-30 13:47:06 +02:00
1 parent 1ec05cda39
commit 9c4b973faf
62 files changed
+6306 -1285

No files matched your search

@@ -0,0 +1,51 @@
import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it, vi } from "vitest";
import { type BcPageData, BcPageDetail } from "./bc-manager";
vi.mock("@/actions/catalog-bc", () => ({
createBcItem: vi.fn(),
deleteBcItem: vi.fn(),
updateBcItem: vi.fn(),
updateBcPage: vi.fn(),
}));
vi.mock("@/components/admin/confirm-dialog", () => ({
useConfirmDialog: () => ({ confirm: vi.fn(), dialog: null }),
}));
vi.mock("@/hooks/use-server-action", () => ({
useServerAction: () => ({ isPending: false, run: vi.fn() }),
}));
const page: BcPageData = {
id: 7,
parentId: -1,
caption: "Builder Club",
pageLayout: "default_3x3",
iconColor: 0,
iconImage: 1,
orderNum: 1,
visible: "1",
enabled: "1",
pageHeadline: "",
pageTeaser: "",
pageSpecial: "",
pageText1: "",
pageText2: "",
pageTextDetails: "",
pageTextTeaser: "",
};
describe("BcPageDetail", () => {
it("uses the canonical return route when embedded in Housekeeping", () => {
const markup = renderToStaticMarkup(
<BcPageDetail
page={page}
items={[]}
canEdit={false}
returnHref="/ase/economy/catalog"
/>,
);
expect(markup).toContain('href="/ase/economy/catalog"');
expect(markup).not.toContain('href="/admin/catalog?catalog=bc"');
});
});
@@ -77,11 +77,17 @@ interface BcPageDetailProps {
page: BcPageData;
items: BcItemData[];
canEdit: boolean;
returnHref?: string;
}
// ── Main Component ───────────────────────────────────────────────────
export function BcPageDetail({ page, items, canEdit }: BcPageDetailProps) {
export function BcPageDetail({
page,
items,
canEdit,
returnHref = "/admin/catalog?catalog=bc",
}: BcPageDetailProps) {
const { isPending, run } = useServerAction();
const { confirm, dialog: confirmDialog } = useConfirmDialog();
const formRef = useRef<HTMLFormElement>(null);
@@ -136,7 +142,7 @@ export function BcPageDetail({ page, items, canEdit }: BcPageDetailProps) {
{/* Header */}
<div className="flex items-center gap-3">
<Link
href="/admin/catalog?catalog=bc"
href={returnHref}
className="flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors"
>
<ArrowLeft className="h-4 w-4" />