keycloak-scim/js/apps/account-ui
Erik Jan de Wit d2e8092c7f
move keycloak select to ui-shared and fix typeahead (#30209)
* move keycloak select to ui-shared and fix typeahead

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* Fix the account console test

Signed-off-by: Hynek Mlnarik <hmlnarik@redhat.com>

* Fix cypress tests

Signed-off-by: Hynek Mlnarik <hmlnarik@redhat.com>

* fix for when value is an array

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fix for when value is an array

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* add support for array selecting single value

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* fixed saying open once clicked outside and value

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* small issue when pressing enter

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

---------

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Signed-off-by: Hynek Mlnarik <hmlnarik@redhat.com>
Co-authored-by: Hynek Mlnarik <hmlnarik@redhat.com>
2024-06-07 16:05:03 +00:00
..
maven-resources Add oid4vci to the account console (#29174) 2024-05-31 15:11:32 +02:00
maven-resources-community/theme/keycloak.v3/account/messages Translated using Weblate (Georgian) 2024-06-03 11:25:10 +02:00
public Add oid4vci to the account console (#29174) 2024-05-31 15:11:32 +02:00
src fix oid4vci tests 2024-06-06 10:58:01 +02:00
test move keycloak select to ui-shared and fix typeahead (#30209) 2024-06-07 16:05:03 +00:00
.gitignore
index.html
package.json Bump vite from 5.2.11 to 5.2.12 (#29954) 2024-06-03 10:49:08 +02:00
playwright.config.ts Use correct PNPM workspace names on CI (#29973) 2024-06-03 13:42:44 +02:00
pom.xml Align environment variables between consoles (#30125) 2024-06-06 08:36:46 +02:00
README.md Align environment variables between consoles (#30125) 2024-06-06 08:36:46 +02:00
tsconfig.json
vite.config.ts

Keycloak Account UI

This project is the next generation of the Keycloak Account UI. It is written with React and PatternFly 4 and uses Vite.

Features

Contains all the "pages" from the account-ui as re-usable components, all the functions to save and the side menu to use in your own build of the account-ui

Install

npm i @keycloak/keycloak-account-ui

Usage

To use these pages you'll need to add KeycloakProvider in your component hierarchy to setup what client, realm and url to use.

import { KeycloakProvider } from "@keycloak/keycloak-account-ui";

//...

<KeycloakProvider environment={{
      authServerUrl: "http://localhost:8080",
      realm: "master",
      clientId: "security-admin-console"
  }}>
  {/* rest of you application */}
</KeycloakProvider>

Translation

For the translation we use react-i18next you can set it up as described on their website. If you want to use the translations that are provided then you need to add i18next-http-backend to your project and add:


backend: {
  loadPath: `http://localhost:8180/resources/master/account/{{lng}}`,
  parse: (data: string) => {
    const messages = JSON.parse(data);

    const result: Record<string, string> = {};
    messages.forEach((v) => (result[v.key] = v.value));
    return result;
  },
},

to the i18next config object.

Save functions

If you want to build your own "pages" you can still reuse the save functions:

  • deleteConsent
  • deleteCredentials
  • deleteSession
  • getApplications
  • getCredentials
  • getDevices
  • getGroups
  • getLinkedAccounts
  • getPermissionRequests
  • getPersonalInfo
  • getSupportedLocales
  • linkAccount
  • savePersonalInfo
  • unLinkAccount

Example:

import { savePersonalInfo, useEnvironment } from "@keycloak/keycloak-account-ui";

//...
function App() {
  // the save function also needs to have the context so that it knows where to POST
  // this hook gives us access to the `KeycloakProvider` context
  const context = useEnvironment();
  const submit = async (data) => {
    try {
      await savePersonalInfo(context, data);
    } catch (error) {
      // Error contains `name` and `value` of the server side errors
      // and your app will have better error handling ;)
      console.error(error);
    }
}
// ...

Building

To build a library instead of an app you need to add the LIB=true environment variable.

LIB=true pnpm run build