rename pageBasename by pageId

This commit is contained in:
Joseph Garrone 2021-03-06 22:41:36 +01:00
parent 6eccd313b6
commit 307650aaea
10 changed files with 68 additions and 24 deletions

View File

@ -0,0 +1,4 @@
<script>const _=
{
}
</script>

View File

@ -9,7 +9,9 @@ import fs from "fs";
import { join as pathJoin } from "path";
import { objectKeys } from "evt/tools/typeSafety/objectKeys";
function loadFtlFile(ftlFileBasename: "template.ftl" | "login.ftl" | "register.ftl" | "info.ftl") {
export type PageId = "login.ftl" | "register.ftl" | "info.ftl" | "error.ftl";
function loadFtlFile(ftlFileBasename: PageId | "template.ftl") {
return fs.readFileSync(pathJoin(__dirname, ftlFileBasename))
.toString("utf8")
.match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)![1];
@ -98,16 +100,16 @@ export function generateFtlFilesCodeFactory(
function generateFtlFilesCode(
params: {
pageBasename: "login.ftl" | "register.ftl" | "info.ftl"
pageId: PageId;
}
): { ftlCode: string; } {
const { pageBasename } = params;
const { pageId } = params;
const $ = cheerio.load(partiallyFixedIndexHtmlCode);
const ftlPlaceholders = {
'{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageBasename),
'{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageId),
...ftlCommonPlaceholders
};
@ -117,7 +119,7 @@ export function generateFtlFilesCodeFactory(
'<script>',
'',
` window.${ftlValuesGlobalName} = Object.assign(`,
` { "pageBasename": "${pageBasename}" },`,
` { "pageId": "${pageId}" },`,
` ${objectKeys(ftlPlaceholders)[0]}`,
' );',
'',

View File

@ -70,12 +70,12 @@ export function generateKeycloakThemeResources(
).toString("utf8")
});
(["login.ftl", "register.ftl"] as const).forEach(pageBasename => {
(["login.ftl", "register.ftl"] as const).forEach(pageId => {
const { ftlCode } = generateFtlFilesCode({ pageBasename });
const { ftlCode } = generateFtlFilesCode({ pageId });
fs.writeFileSync(
pathJoin(themeDirPath, pageBasename),
pathJoin(themeDirPath, pageId),
Buffer.from(ftlCode, "utf8")
)

View File

@ -0,0 +1,38 @@
import { memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import { assert } from "../tools/assert";
import { kcContext } from "../kcContext";
import { useKcTranslation } from "../i18n/useKcTranslation";
export const Error = memo((props: KcProps) => {
const { t } = useKcTranslation();
assert(
kcContext !== undefined &&
kcContext.pageId === "error.ftl" &&
kcContext.message !== undefined
);
const { message, client } = kcContext;
return (
<Template
{...props}
displayMessage={false}
headerNode={t("errorTitle")}
formNode={
<div id="kc-error-message">
<p className="instruction">{message.summary}</p>
<#if client?? && client.baseUrl?has_content>
<p><a id="backToApplication" href="${client.baseUrl}">${kcSanitize(msg("backToApplication"))?no_esc}</a></p>
</#if>
</div>
}
/>
);
});

View File

@ -12,7 +12,7 @@ export const Info = memo((props: KcProps) => {
assert(
kcContext !== undefined &&
kcContext.pageBasename === "info.ftl" &&
kcContext.pageId === "info.ftl" &&
kcContext.message !== undefined
);

View File

@ -12,7 +12,7 @@ export const KcApp = memo((props: KcProps) => {
assert(kcContext !== undefined, "App is not currently served by a Keycloak server");
switch (kcContext.pageBasename) {
switch (kcContext.pageId) {
case "login.ftl": return <Login {...props} />;
case "register.ftl": return <Register {...props} />;
case "info.ftl": return <Info {...props} />;

View File

@ -14,7 +14,7 @@ export const Login = memo((props: KcProps) => {
assert(
kcContext !== undefined &&
kcContext.pageBasename === "login.ftl"
kcContext.pageId === "login.ftl"
);
const {

View File

@ -12,7 +12,7 @@ export const Register = memo((props: KcProps) => {
assert(
kcContext !== undefined &&
kcContext.pageBasename === "register.ftl"
kcContext.pageId === "register.ftl"
);
const {

View File

@ -9,5 +9,6 @@ export * from "./components/Login";
export * from "./components/Template";
export * from "./components/KcApp";
export * from "./components/Info";
export * from "./components/Error";
export * from "./tools/assert";

View File

@ -1,6 +1,6 @@
import { ftlValuesGlobalName } from "../bin/build-keycloak-theme/ftlValuesGlobalName";
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import type { PageId } from "../bin/build-keycloak-theme/generateFtl";
import { id } from "evt/tools/typeSafety/id";
import type { KcLanguageTag } from "./i18n/KcLanguageTag";
import { doExtends } from "evt/tools/typeSafety/doExtends";
@ -10,7 +10,7 @@ import type { LanguageLabel } from "./i18n/KcLanguageTag";
type ExtractAfterStartingWith<Prefix extends string, StrEnum> =
StrEnum extends `${Prefix}${infer U}` ? U : never;
export type KcContext = KcContext.Login | KcContext.Register | KcContext.Info;
export type KcContext = KcContext.Login | KcContext.Register | KcContext.Info | KcContext.Error;
export declare namespace KcContext {
export type Template = {
@ -55,7 +55,7 @@ export declare namespace KcContext {
};
export type Login = Template & {
pageBasename: "login.ftl";
pageId: "login.ftl";
url: {
loginResetCredentialsUrl: string;
registrationUrl: string;
@ -87,7 +87,7 @@ export declare namespace KcContext {
};
export type Register = Template & {
pageBasename: "register.ftl";
pageId: "register.ftl";
url: {
registrationAction: string;
};
@ -120,7 +120,7 @@ export declare namespace KcContext {
};
export type Info = Template & {
pageBasename: "info.ftl";
pageId: "info.ftl";
messageHeader?: string;
requiredActions?: ExtractAfterStartingWith<"requiredAction.",MessageKey>[];
skipLink: boolean;
@ -131,14 +131,13 @@ export declare namespace KcContext {
}
};
export type Error = Template & {
pageId: "error.ftl"
};
}
{
type T = KcContext["pageBasename"];
type U = Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
doExtends<T, U>();
doExtends<U, T>();
}
doExtends<KcContext["pageId"], PageId>();
doExtends<PageId, KcContext["pageId"]>();
export const kcContext = id<KcContext | undefined>((window as any)[ftlValuesGlobalName]);