import { http, HttpResponse } from "msw";
import preview from "../../.storybook/preview.tsx";
import { LetterheadParagraph } from "../Letterhead/index.tsx";
import { sleep } from "../sleep.ts";
import { SubscribeByPledgeCard } from "./SubscribeByPledgeCard.tsx";
const pledge = {
id: "1",
email: "test@example.com",
contactSubscribed: false,
};
const subscribeByPledgeId = {
success() {
return http.post(
"http://mock.api/v1/newsletters/changelog/subscriptions",
async () => {
await sleep(2000);
return HttpResponse.json(
{ message: "Added to newsletter" },
{ status: 201 },
);
},
);
},
noConnection() {
return http.post(
"http://mock.api/v1/newsletters/changelog/subscriptions",
async () => {
return HttpResponse.error();
},
);
},
error() {
return http.post(
"http://mock.api/v1/newsletters/changelog/subscriptions",
async () => {
await sleep(2000);
return HttpResponse.text("Application error", { status: 500 });
},
);
},
};
/**
* Allows users to subscribe to ITC's newsletter using the email provided
* in their pledge.
*/
const meta = preview.meta({
title: "Newsletter/Subscribe By Pledge Card",
component: SubscribeByPledgeCard,
tags: ["autodocs"],
args: {
pledge,
content: {
SUBSCRIBE: {
title: "Space Gits on Indie Tabletop Club",
description: (
Space Gits is getting a fancy gang builder and{" "}
smart rules in late 2025 in collaboration with
Indie Tabletop Club. Subscribe to ITC's{" "}
at‑most‑one‑a‑month newsletter and be among the first to
gain early access. It's gonna be rad.
),
},
SUBSCRIBE_SUCCESS: {
title: "Subscribed!",
description:
"Thank you for being awesome. Once Space Gits is available for " +
"early access, you will be among the first to know!",
},
PREVIOUSLY_SUBSCRIBED: {
title: "Space Gits on Indie Tabletop Club",
description: (
<>
Space Gits is getting a fancy gang builder and{" "}
smart rules in late 2025 in collaboration with
Indie Tabletop Club.
Early access will be announced via ITC's newsletter, which
— according to our records — you are are already
subscribed to! Nothing left to do but await the good news in your
inbox!
>
),
},
},
},
parameters: {
msw: {
handlers: {
subscribeByPledgeId: subscribeByPledgeId.success(),
},
},
},
});
/**
* The default case, in which the user is not yet subscribed to ITC's newsletter
* and the submission is successful.
*/
export const Default = meta.story({});
/**
* Same like the default case, but the form submission fails. Errors are
* differentiated using the `getSubmitFailureMessage` helper, so all the basics
* should be covered, as this page doesn't have special cases.
*/
export const FailureOnSubmit = meta.story({
parameters: {
msw: {
handlers: {
subscribeByPledgeId: subscribeByPledgeId.error(),
},
},
},
});
/**
* In this case, the email address associated with this user account is
* already subscribed to our newsletter.
*/
export const AlreadySubscribed = meta.story({
args: { pledge: { ...pledge, contactSubscribed: true } },
});