keycloak_theme/stories/login/pages/Register.stories.tsx

173 lines
5.6 KiB
TypeScript
Raw Normal View History

2023-04-20 05:41:34 +02:00
import React from "react";
2024-06-03 00:11:19 +02:00
import type { Meta, StoryObj } from "@storybook/react";
2024-06-09 11:53:25 +02:00
import { createKcPageStory } from "../KcPageStory";
2024-06-28 06:46:26 +02:00
import type { Attribute } from "../../../dist/login";
2023-04-20 05:41:34 +02:00
2024-06-09 11:53:25 +02:00
const { KcPageStory } = createKcPageStory({ pageId: "register.ftl" });
2023-04-20 05:41:34 +02:00
2024-06-03 00:11:19 +02:00
const meta = {
2024-06-06 07:28:34 +02:00
title: "login/register.ftl",
2024-06-09 11:53:25 +02:00
component: KcPageStory
} satisfies Meta<typeof KcPageStory>;
2023-04-20 05:41:34 +02:00
export default meta;
2024-06-03 00:11:19 +02:00
type Story = StoryObj<typeof meta>;
export const Default: Story = {
2024-06-09 11:53:25 +02:00
render: () => <KcPageStory />
2024-06-03 00:11:19 +02:00
};
2024-06-12 23:11:06 +02:00
export const WithEmailAlreadyExists: Story = {
2024-06-03 00:11:19 +02:00
render: () => (
2024-06-09 11:53:25 +02:00
<KcPageStory
2024-06-03 00:11:19 +02:00
kcContext={{
profile: {
2024-06-03 23:54:08 +02:00
attributesByName: {
2024-06-12 23:11:06 +02:00
username: {
value: "johndoe"
},
2024-06-03 23:54:08 +02:00
email: {
2024-06-12 23:11:06 +02:00
value: "jhon.doe@gmail.com"
},
firstName: {
value: "John"
},
lastName: {
value: "Doe"
2024-06-03 00:11:19 +02:00
}
2024-06-03 23:54:08 +02:00
}
2024-06-03 00:11:19 +02:00
},
messagesPerField: {
2024-06-12 23:11:06 +02:00
// NOTE: The other functions of messagesPerField are derived from get() and
// existsError() so they are the only ones that need to mock.
existsError: (fieldName: string, ...otherFieldNames: string[]) => [fieldName, ...otherFieldNames].includes("email"),
get: (fieldName: string) => (fieldName === "email" ? "Email already exists." : undefined)
2024-06-03 00:11:19 +02:00
}
}}
/>
)
};
2024-06-28 06:46:26 +02:00
export const WithRestrictedToMITStudents: Story = {
2024-06-03 00:11:19 +02:00
render: () => (
2024-06-09 11:53:25 +02:00
<KcPageStory
2024-06-03 00:11:19 +02:00
kcContext={{
2024-06-28 06:46:26 +02:00
profile: {
attributesByName: {
email: {
validators: {
pattern: {
pattern: "^[^@]+@([^.]+\\.)*((mit\\.edu)|(berkeley\\.edu))$",
"error-message": "${profile.attributes.email.pattern.error}"
}
},
annotations: {
inputHelperTextBefore: "${profile.attributes.email.inputHelperTextBefore}"
}
}
}
},
"x-keycloakify": {
realmMessageBundleUserProfile: {
"${profile.attributes.email.inputHelperTextBefore}": "Please use your MIT or Berkeley email.",
"${profile.attributes.email.pattern.error}":
"This is not an MIT (<strong>@mit.edu</strong>) nor a Berkeley (<strong>@berkeley.edu</strong>) email."
}
}
}}
/>
)
};
export const WithFavoritePet: Story = {
render: () => (
<KcPageStory
kcContext={{
profile: {
attributesByName: {
favoritePet: {
name: "favorite-pet",
displayName: "${profile.attributes.favoritePet}",
validators: {
options: {
options: ["cat", "dog", "fish"]
}
},
annotations: {
inputOptionLabelsI18nPrefix: "profile.attributes.favoritePet.options"
},
required: false,
readOnly: false
} satisfies Attribute
}
},
"x-keycloakify": {
realmMessageBundleUserProfile: {
"${profile.attributes.favoritePet}": "Favorite Pet",
"${profile.attributes.favoritePet.options.cat}": "Fluffy Cat",
"${profile.attributes.favoritePet.options.dog}": "Loyal Dog",
"${profile.attributes.favoritePet.options.fish}": "Peaceful Fish"
}
2024-06-03 00:11:19 +02:00
}
}}
/>
)
};
2024-06-28 06:46:26 +02:00
export const WithEmailAsUsername: Story = {
2024-06-03 00:11:19 +02:00
render: () => (
2024-06-09 11:53:25 +02:00
<KcPageStory
2024-06-03 00:11:19 +02:00
kcContext={{
2024-06-28 06:46:26 +02:00
realm: {
registrationEmailAsUsername: true
},
profile: {
attributesByName: {
username: undefined
}
}
2024-06-03 00:11:19 +02:00
}}
/>
)
};
2024-06-03 00:11:19 +02:00
export const WithRecaptcha: Story = {
render: () => (
2024-06-09 11:53:25 +02:00
<KcPageStory
2024-06-03 00:11:19 +02:00
kcContext={{
2024-06-04 01:39:54 +02:00
scripts: ["https://www.google.com/recaptcha/api.js?hl=en"],
2024-06-03 00:11:19 +02:00
recaptchaRequired: true,
2024-06-04 01:39:54 +02:00
recaptchaSiteKey: "6LfQHvApAAAAAE73SYTd5vS0lB1Xr7zdiQ-6iBVa"
2024-06-03 00:11:19 +02:00
}}
/>
)
};
2024-06-05 01:02:17 +02:00
export const WithRecaptchaFrench: Story = {
render: () => (
2024-06-09 11:53:25 +02:00
<KcPageStory
2024-06-05 01:02:17 +02:00
kcContext={{
locale: {
currentLanguageTag: "fr"
},
scripts: ["https://www.google.com/recaptcha/api.js?hl=fr"],
recaptchaRequired: true,
recaptchaSiteKey: "6LfQHvApAAAAAE73SYTd5vS0lB1Xr7zdiQ-6iBVa"
}}
/>
)
};
2024-06-12 23:22:21 +02:00
export const WithPasswordMinLength8: Story = {
render: () => (
<KcPageStory
kcContext={{
passwordPolicies: {
length: 8
}
}}
/>
)
};