Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
1a326bf7e4 | |||
e1afc1cf7a | |||
bb007ddce5 | |||
b5dd0317c7 | |||
3c54541a73 | |||
2657f01135 | |||
7223409eb1 | |||
c41eae63e7 |
@ -47,12 +47,12 @@
|
|||||||
|
|
||||||
> 📣 🛑 Account themes generated by Keycloakify are not currently compatible with Keycloak 22.
|
> 📣 🛑 Account themes generated by Keycloakify are not currently compatible with Keycloak 22.
|
||||||
> We are working on a solution. [Follow progress](https://github.com/keycloakify/keycloakify/issues/389).
|
> We are working on a solution. [Follow progress](https://github.com/keycloakify/keycloakify/issues/389).
|
||||||
> Login and email themes are not affected.
|
> **Login and email themes are not affected**.
|
||||||
> UPDATE: [The PR](https://github.com/keycloak/keycloak/pull/22317) that should future proof Keycloakify account themes has been greenlighted
|
> UPDATE: [The PR](https://github.com/keycloak/keycloak/pull/22317) that should future proof Keycloakify account themes has been
|
||||||
> by the Keycloak team. Resolution is only a matter of time.
|
> merged into Keycloak! 🥳 Credit to @xgp. We are now waiting for a new Keycloak release to be published.
|
||||||
|
|
||||||
Keycloakify is fully compatible with Keycloak, starting from version 11 and is anticipated to maintain compatibility with all future versions.
|
Keycloakify is fully compatible with Keycloak, starting from version 11 and is anticipated to maintain compatibility with all future versions.
|
||||||
You can update your Keycloak, your Keycloakify generated theme won't break.
|
You can update your Keycloak, your Keycloakify generated theme won't break. (Well except for Keycloak 22's Account theme obviously but this was hopefully a one time debacle)
|
||||||
To understand the basis of my confidence in this, you can [visit this discussion thread where I've explained in detail](https://github.com/keycloakify/keycloakify/discussions/346#discussioncomment-5889791).
|
To understand the basis of my confidence in this, you can [visit this discussion thread where I've explained in detail](https://github.com/keycloakify/keycloakify/discussions/346#discussioncomment-5889791).
|
||||||
|
|
||||||
## Sponsor 👼
|
## Sponsor 👼
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "keycloakify",
|
"name": "keycloakify",
|
||||||
"version": "8.3.2",
|
"version": "8.4.1",
|
||||||
"description": "Create Keycloak themes using React",
|
"description": "Create Keycloak themes using React",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -6,6 +6,7 @@ export type KcContext = KcContext.Password | KcContext.Account;
|
|||||||
|
|
||||||
export declare namespace KcContext {
|
export declare namespace KcContext {
|
||||||
export type Common = {
|
export type Common = {
|
||||||
|
themeVersion: string;
|
||||||
keycloakifyVersion: string;
|
keycloakifyVersion: string;
|
||||||
themeType: "account";
|
themeType: "account";
|
||||||
themeName: string;
|
themeName: string;
|
||||||
|
@ -7,6 +7,7 @@ import type { KcContext } from "./KcContext";
|
|||||||
const PUBLIC_URL = (typeof process !== "object" ? undefined : process.env?.["PUBLIC_URL"]) || "/";
|
const PUBLIC_URL = (typeof process !== "object" ? undefined : process.env?.["PUBLIC_URL"]) || "/";
|
||||||
|
|
||||||
export const kcContextCommonMock: KcContext.Common = {
|
export const kcContextCommonMock: KcContext.Common = {
|
||||||
|
"themeVersion": "0.0.0",
|
||||||
"keycloakifyVersion": "0.0.0",
|
"keycloakifyVersion": "0.0.0",
|
||||||
"themeType": "account",
|
"themeType": "account",
|
||||||
"themeName": "my-theme-name",
|
"themeName": "my-theme-name",
|
||||||
|
@ -124,6 +124,27 @@ export function generateFtlFilesCodeFactory(params: {
|
|||||||
].join("\n")
|
].join("\n")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Remove part of the document marked as ignored.
|
||||||
|
{
|
||||||
|
const startTags = $('meta[name="keycloakify-ignore-start"]');
|
||||||
|
|
||||||
|
startTags.each((...[, startTag]) => {
|
||||||
|
const $startTag = $(startTag);
|
||||||
|
const $endTag = $startTag.nextAll('meta[name="keycloakify-ignore-end"]').first();
|
||||||
|
|
||||||
|
if ($endTag.length) {
|
||||||
|
let currentNode = $startTag.next();
|
||||||
|
while (currentNode.length && !currentNode.is($endTag)) {
|
||||||
|
currentNode.remove();
|
||||||
|
currentNode = $startTag.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
$startTag.remove();
|
||||||
|
$endTag.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const partiallyFixedIndexHtmlCode = $.html();
|
const partiallyFixedIndexHtmlCode = $.html();
|
||||||
|
|
||||||
function generateFtlFilesCode(params: { pageId: string }): {
|
function generateFtlFilesCode(params: { pageId: string }): {
|
||||||
|
@ -39,6 +39,7 @@ export type KcContext =
|
|||||||
|
|
||||||
export declare namespace KcContext {
|
export declare namespace KcContext {
|
||||||
export type Common = {
|
export type Common = {
|
||||||
|
themeVersion: string;
|
||||||
keycloakifyVersion: string;
|
keycloakifyVersion: string;
|
||||||
themeType: "login";
|
themeType: "login";
|
||||||
themeName: string;
|
themeName: string;
|
||||||
|
@ -103,6 +103,7 @@ const attributes: Attribute[] = [
|
|||||||
const attributesByName = Object.fromEntries(attributes.map(attribute => [attribute.name, attribute])) as any;
|
const attributesByName = Object.fromEntries(attributes.map(attribute => [attribute.name, attribute])) as any;
|
||||||
|
|
||||||
export const kcContextCommonMock: KcContext.Common = {
|
export const kcContextCommonMock: KcContext.Common = {
|
||||||
|
"themeVersion": "0.0.0",
|
||||||
"keycloakifyVersion": "0.0.0",
|
"keycloakifyVersion": "0.0.0",
|
||||||
"themeType": "login",
|
"themeType": "login",
|
||||||
"themeName": "my-theme-name",
|
"themeName": "my-theme-name",
|
||||||
|
@ -8,7 +8,10 @@ export default function Info(props: PageProps<Extract<KcContext, { pageId: "info
|
|||||||
|
|
||||||
const { msgStr, msg } = i18n;
|
const { msgStr, msg } = i18n;
|
||||||
|
|
||||||
assert(kcContext.message !== undefined);
|
assert(
|
||||||
|
kcContext.message !== undefined,
|
||||||
|
"No message in kcContext.message, there will always be a message in production context, add it in your mock"
|
||||||
|
);
|
||||||
|
|
||||||
const { messageHeader, message, requiredActions, skipLink, pageRedirectUri, actionUri, client } = kcContext;
|
const { messageHeader, message, requiredActions, skipLink, pageRedirectUri, actionUri, client } = kcContext;
|
||||||
|
|
||||||
|
@ -21,4 +21,13 @@ const meta: ComponentMeta<any> = {
|
|||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
||||||
export const Default = () => <PageStory />;
|
export const Default = () => (
|
||||||
|
<PageStory
|
||||||
|
kcContext={{
|
||||||
|
message: {
|
||||||
|
summary: "This is the server message",
|
||||||
|
type: "info"
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
Reference in New Issue
Block a user