diff --git a/package.json b/package.json index 6589cb0..121d0c3 100755 --- a/package.json +++ b/package.json @@ -1,87 +1,67 @@ { - "name": "keycloakify-starter", - "homepage": "https://starter.keycloakify.dev", - "version": "3.0.0", - "description": "A starter/demo project for keycloakify", - "repository": { - "type": "git", - "url": "git://github.com/codegouvfr/keycloakify-starter.git" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "build-keycloak-theme": "yarn build ; keycloakify", - "download-builtin-keycloak-theme": "download-builtin-keycloak-theme 15.0.2", - "storybook": "start-storybook -p 6006 -s public", - "build-storybook": "build-storybook -s public" - }, - "keycloakify": { - "extraPages": [ - "my-extra-page-1.ftl", - "my-extra-page-2.ftl" - ] - }, - "author": "u/garronej", - "license": "MIT", - "keywords": [], - "dependencies": { - "evt": "^2.4.15", - "jwt-decode": "^3.1.2", - "keycloak-js": "^21.0.1", - "keycloakify": "^6.12.4", - "powerhooks": "^0.26.2", - "react": "18.1.0", - "react-dom": "18.1.0", - "tsafe": "^1.4.3" - }, - "devDependencies": { - "@storybook/addon-actions": "^6.5.16", - "@storybook/addon-essentials": "^6.5.16", - "@storybook/addon-interactions": "^6.5.16", - "@storybook/addon-links": "^6.5.16", - "@storybook/builder-webpack5": "^6.5.16", - "@storybook/manager-webpack5": "^6.5.16", - "@storybook/node-logger": "^6.5.16", - "@storybook/preset-create-react-app": "^4.1.2", - "@storybook/react": "^6.5.16", - "@storybook/testing-library": "^0.0.13", - "@types/node": "^15.3.1", - "@types/react": "18.0.9", - "@types/react-dom": "18.0.4", - "react-scripts": "5.0.0", - "typescript": "~4.8.0" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ], - "rules": { - "react-hooks/exhaustive-deps": "off", - "@typescript-eslint/no-redeclare": "off", - "no-labels": "off" + "name": "keycloakify-starter", + "homepage": "https://starter.keycloakify.dev", + "version": "3.1.0", + "description": "A starter/demo project for keycloakify", + "repository": { + "type": "git", + "url": "git://github.com/codegouvfr/keycloakify-starter.git" }, - "overrides": [ - { - "files": [ - "**/*.stories.*" + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "build-keycloak-theme": "yarn build && keycloakify", + "download-builtin-keycloak-theme": "download-builtin-keycloak-theme 15.0.2" + }, + "keycloakify": { + "extraPages": [ + "my-extra-page-1.ftl", + "my-extra-page-2.ftl" + ] + }, + "author": "u/garronej", + "license": "MIT", + "keywords": [], + "dependencies": { + "evt": "^2.4.15", + "jwt-decode": "^3.1.2", + "keycloak-js": "^21.0.1", + "keycloakify": "^6.12.7", + "powerhooks": "^0.26.2", + "react": "18.1.0", + "react-dom": "18.1.0", + "tsafe": "^1.4.3" + }, + "devDependencies": { + "@types/node": "^15.3.1", + "@types/react": "18.0.9", + "@types/react-dom": "18.0.4", + "react-scripts": "5.0.0", + "typescript": "~4.8.0" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" ], "rules": { - "import/no-anonymous-default-export": "off" + "react-hooks/exhaustive-deps": "off", + "@typescript-eslint/no-redeclare": "off", + "no-labels": "off" } - } - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } + } +] +}, +"browserslist": { +"production": [ + ">0.2%", + "not dead", + "not op_mini all" +], +"development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" +] } +} \ No newline at end of file diff --git a/src/keycloak-theme/KcApp.tsx b/src/keycloak-theme/KcApp.tsx index efe0cf6..1235b6b 100644 --- a/src/keycloak-theme/KcApp.tsx +++ b/src/keycloak-theme/KcApp.tsx @@ -5,13 +5,15 @@ import { useI18n } from "./i18n"; import Fallback, { defaultKcProps, type KcProps, type PageProps } from "keycloakify"; import Template from "./Template"; import DefaultTemplate from "keycloakify/lib/Template"; -import { foo, bar } from "./valuesTransferredOverUrl"; -console.log(`Values passed by the main app in the URL parameter:`, { foo, bar }); +// You can uncomment this to see the values passed by the main app before redirecting. +//import { foo, bar } from "./valuesTransferredOverUrl"; +//console.log(`Values passed by the main app in the URL parameter:`, { foo, bar }); const Login = lazy(()=> import("./pages/Login")); // If you can, favor register-user-profile.ftl over register.ftl, see: https://docs.keycloakify.dev/realtime-input-validation const Register = lazy(() => import("./pages/Register")); +const RegisterUserProfile = lazy(() => import("./pages/RegisterUserProfile")); const Terms = lazy(() => import("./pages/Terms")); const MyExtraPage1 = lazy(() => import("./pages/MyExtraPage1")); const MyExtraPage2 = lazy(() => import("./pages/MyExtraPage2")); @@ -61,6 +63,7 @@ export default function App(props: { kcContext: KcContext; }) { switch (kcContext.pageId) { case "login.ftl": return ; case "register.ftl": return ; + case "register-user-profile.ftl": return case "terms.ftl": return ; case "my-extra-page-1.ftl": return ; case "my-extra-page-2.ftl": return ; diff --git a/src/keycloak-theme/pages/RegisterUserProfile.tsx b/src/keycloak-theme/pages/RegisterUserProfile.tsx new file mode 100644 index 0000000..492e82b --- /dev/null +++ b/src/keycloak-theme/pages/RegisterUserProfile.tsx @@ -0,0 +1,61 @@ +// Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/lib/pages/RegisterUserProfile.tsx +import { useState } from "react"; +import { clsx } from "keycloakify/lib/tools/clsx"; +import { UserProfileFormFields } from "./shared/UserProfileCommons"; +import type { PageProps } from "keycloakify/lib/KcProps"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function RegisterUserProfile(props: PageProps, I18n>) { + const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props; + + const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey } = kcContext; + + const { msg, msgStr } = i18n; + + const [isFomSubmittable, setIsFomSubmittable] = useState(false); + + return ( +