diff --git a/js/apps/admin-ui/src/components/dynamic/IntComponent.tsx b/js/apps/admin-ui/src/components/dynamic/IntComponent.tsx new file mode 100644 index 000000000000..eed671478519 --- /dev/null +++ b/js/apps/admin-ui/src/components/dynamic/IntComponent.tsx @@ -0,0 +1,26 @@ +import { useTranslation } from "react-i18next"; +import { TextControl } from "@keycloak/keycloak-ui-shared"; + +import { convertToName } from "./DynamicComponents"; +import { NumberComponentProps } from "./components"; + +export const IntComponent = ({ + name, + label, + helpText, + ...props +}: NumberComponentProps) => { + const { t } = useTranslation(); + + return ( + + ); +}; diff --git a/js/apps/admin-ui/src/components/dynamic/NumberComponent.tsx b/js/apps/admin-ui/src/components/dynamic/NumberComponent.tsx new file mode 100644 index 000000000000..5256833d55c8 --- /dev/null +++ b/js/apps/admin-ui/src/components/dynamic/NumberComponent.tsx @@ -0,0 +1,25 @@ +import { useTranslation } from "react-i18next"; +import { TextControl } from "@keycloak/keycloak-ui-shared"; + +import { convertToName } from "./DynamicComponents"; +import { NumberComponentProps } from "./components"; + +export const NumberComponent = ({ + name, + label, + helpText, + ...props +}: NumberComponentProps) => { + const { t } = useTranslation(); + + return ( + + ); +}; diff --git a/js/apps/admin-ui/src/components/dynamic/components.ts b/js/apps/admin-ui/src/components/dynamic/components.ts index 86044d6ce782..918923bf3bc2 100644 --- a/js/apps/admin-ui/src/components/dynamic/components.ts +++ b/js/apps/admin-ui/src/components/dynamic/components.ts @@ -16,6 +16,8 @@ import { StringComponent } from "./StringComponent"; import { TextComponent } from "./TextComponent"; import { UrlComponent } from "./UrlComponent"; import { UserProfileAttributeListComponent } from "./UserProfileAttributeListComponent"; +import { IntComponent } from "./IntComponent"; +import { NumberComponent } from "./NumberComponent"; export type ComponentProps = Omit & { isDisabled?: boolean; @@ -23,9 +25,16 @@ export type ComponentProps = Omit & { stringify?: boolean; }; +export type NumberComponentProps = ComponentProps & { + min?: number; + max?: number; +}; + type ComponentType = | "String" | "Text" + | "Integer" + | "Number" | "boolean" | "List" | "Role" @@ -46,6 +55,8 @@ export const COMPONENTS: { String: StringComponent, Text: TextComponent, boolean: BooleanComponent, + Integer: IntComponent, + Number: NumberComponent, List: ListComponent, Role: RoleComponent, Script: ScriptComponent, diff --git a/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts b/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts index 6ca8f75c9853..c1c1491f6f32 100644 --- a/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts +++ b/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts @@ -17,4 +17,5 @@ export interface ConfigPropertyRepresentation { options?: string[]; secret?: boolean; required?: boolean; + placeholder?: string; } diff --git a/js/libs/ui-shared/src/controls/TextControl.tsx b/js/libs/ui-shared/src/controls/TextControl.tsx index 5d4d9eede02a..514777ed0410 100644 --- a/js/libs/ui-shared/src/controls/TextControl.tsx +++ b/js/libs/ui-shared/src/controls/TextControl.tsx @@ -27,6 +27,7 @@ export type TextControlProps< isDisabled?: boolean; helperText?: string; "data-testid"?: string; + type?: string; }; export const TextControl = < diff --git a/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java b/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java index 337ae129f488..a301fb580db5 100755 --- a/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java +++ b/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java @@ -28,6 +28,17 @@ */ public class ProviderConfigProperty { public static final String BOOLEAN_TYPE="boolean"; + + /** + * Integral Value + */ + public static final String INTEGER_TYPE="Integer"; + + /** + * Arbitrary number, e.g. integral, floating-point. + */ + public static final String NUMBER_TYPE="Number"; + public static final String STRING_TYPE="String"; /**