@keycloak/keycloak-admin-ui 26.7.5 → 26.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/lib/.vite/manifest.json +52 -42
- package/lib/{AddDefaultTrust-BvsWwMDh.js → AddDefaultTrust-0TzkSSVz.js} +8 -8
- package/lib/{AddDefaultTrust-BvsWwMDh.js.map → AddDefaultTrust-0TzkSSVz.js.map} +1 -1
- package/lib/{AddJWTAuthorizationGrant-ByBPPwyK.js → AddJWTAuthorizationGrant-BBVNGscZ.js} +12 -12
- package/lib/{AddJWTAuthorizationGrant-ByBPPwyK.js.map → AddJWTAuthorizationGrant-BBVNGscZ.js.map} +1 -1
- package/lib/{AddKubernetesConnect-D4xTogVo.js → AddKubernetesConnect-D_HJWqhs.js} +14 -11
- package/lib/AddKubernetesConnect-D_HJWqhs.js.map +1 -0
- package/lib/{AddOAuth2-BDmTZ-YA.js → AddOAuth2-BiNgjhyO.js} +13 -13
- package/lib/{AddOAuth2-BDmTZ-YA.js.map → AddOAuth2-BiNgjhyO.js.map} +1 -1
- package/lib/AddOid4Vp-gKawBcrP.js +73 -0
- package/lib/AddOid4Vp-gKawBcrP.js.map +1 -0
- package/lib/{AddSpiffeConnect-B6_E1i6Z.js → AddSpiffeConnect-BmHbvLbU.js} +8 -8
- package/lib/{AddSpiffeConnect-B6_E1i6Z.js.map → AddSpiffeConnect-BmHbvLbU.js.map} +1 -1
- package/lib/{CreateFlow-C5QWzOsy.js → CreateFlow-9Jjjw5b9.js} +2 -2
- package/lib/{CreateFlow-C5QWzOsy.js.map → CreateFlow-9Jjjw5b9.js.map} +1 -1
- package/lib/DetailOrganization-DZcO3bbq.js +420 -0
- package/lib/DetailOrganization-DZcO3bbq.js.map +1 -0
- package/lib/{ExecutorForm-n3e9Qvrl.js → ExecutorForm-BrHBEQVA.js} +23 -23
- package/lib/{ExecutorForm-n3e9Qvrl.js.map → ExecutorForm-BrHBEQVA.js.map} +1 -1
- package/lib/{FlowDetails-CnVZXaRP.js → FlowDetails-FqkRF9Fk.js} +243 -226
- package/lib/{FlowDetails-CnVZXaRP.js.map → FlowDetails-FqkRF9Fk.js.map} +1 -1
- package/lib/{NewOrganization-D4X_bhyD.js → NewOrganization-mwmhTgBv.js} +13 -13
- package/lib/NewOrganization-mwmhTgBv.js.map +1 -0
- package/lib/{PermissionConfigurationDetails-UjUwrvYu.js → PermissionConfigurationDetails-BWUvLMh4.js} +92 -91
- package/lib/PermissionConfigurationDetails-BWUvLMh4.js.map +1 -0
- package/lib/PermissionDetails-BkVFczt9.js +437 -0
- package/lib/PermissionDetails-BkVFczt9.js.map +1 -0
- package/lib/{RealmSection-BTCX9rHA.js → RealmSection-DJ8T80Z6.js} +26 -26
- package/lib/{RealmSection-BTCX9rHA.js.map → RealmSection-DJ8T80Z6.js.map} +1 -1
- package/lib/{ResourceDetails-C3cyeLL5.js → ResourceDetails-Cyb5CmVt.js} +24 -24
- package/lib/{ResourceDetails-C3cyeLL5.js.map → ResourceDetails-Cyb5CmVt.js.map} +1 -1
- package/lib/{ScopeDetails-C16qMBw-.js → ScopeDetails-BV7h3hMw.js} +17 -17
- package/lib/{ScopeDetails-C16qMBw-.js.map → ScopeDetails-BV7h3hMw.js.map} +1 -1
- package/lib/{ScopePicker-DbxK9g9R.js → ScopePicker-USX1qW3k.js} +18 -18
- package/lib/{ScopePicker-DbxK9g9R.js.map → ScopePicker-USX1qW3k.js.map} +1 -1
- package/lib/{WorkflowDetailForm-d5rClboG.js → WorkflowDetailForm-BDIXzgoJ.js} +31 -31
- package/lib/{WorkflowDetailForm-d5rClboG.js.map → WorkflowDetailForm-BDIXzgoJ.js.map} +1 -1
- package/lib/{WorkflowsSection-DRU3QF93.js → WorkflowsSection-Htg3cqfo.js} +16 -16
- package/lib/{WorkflowsSection-DRU3QF93.js.map → WorkflowsSection-Htg3cqfo.js.map} +1 -1
- package/lib/apps/admin-ui/src/authentication/constants.d.ts +3 -1
- package/lib/apps/admin-ui/src/client-scopes/details/oid4vciAttributes.d.ts +8 -3
- package/lib/apps/admin-ui/src/clients/ssf/tabs/CreateStreamForm.d.ts +18 -0
- package/lib/apps/admin-ui/src/clients/ssf/utils.d.ts +13 -0
- package/lib/apps/admin-ui/src/components/client/ClientSelect.d.ts +3 -4
- package/lib/apps/admin-ui/src/components/client/ClientSelectModal.d.ts +8 -0
- package/lib/apps/admin-ui/src/components/group/GroupPickerDialog.d.ts +8 -2
- package/lib/apps/admin-ui/src/components/role-mapping/RoleMapping.d.ts +1 -32
- package/lib/apps/admin-ui/src/components/role-mapping/resource.d.ts +9 -1
- package/lib/apps/admin-ui/src/context/identity-provider/IdentityProviderContext.d.ts +12 -0
- package/lib/apps/admin-ui/src/identity-providers/add/AddOid4Vp.d.ts +1 -0
- package/lib/apps/admin-ui/src/identity-providers/add/IdpDomainsTab.d.ts +5 -0
- package/lib/apps/admin-ui/src/identity-providers/add/IdpOrganizationsTab.d.ts +6 -0
- package/lib/apps/admin-ui/src/identity-providers/add/Oid4VpSettings.d.ts +1 -0
- package/lib/apps/admin-ui/src/identity-providers/routes/IdentityProvider.d.ts +1 -1
- package/lib/apps/admin-ui/src/identity-providers/routes/IdentityProviderOid4Vp.d.ts +7 -0
- package/lib/apps/admin-ui/src/organizations/DomainsTab.d.ts +1 -0
- package/lib/apps/admin-ui/src/organizations/IdentityProviderSelect.d.ts +4 -1
- package/lib/apps/admin-ui/src/organizations/MembershipTypeToggle.d.ts +9 -0
- package/lib/apps/admin-ui/src/organizations/OrganizationForm.d.ts +4 -1
- package/lib/apps/admin-ui/src/organizations/routes/EditOrganization.d.ts +1 -1
- package/lib/apps/admin-ui/src/realm-settings/ssf/SsfTransmitterDisableConfirmDialog.d.ts +1 -1
- package/lib/apps/admin-ui/src/utils/useIsFeatureEnabled.d.ts +3 -1
- package/lib/{index-C-D-m0EP.js → index-DsIT2BLV.js} +23888 -22978
- package/lib/{index-C-D-m0EP.js.map → index-DsIT2BLV.js.map} +1 -1
- package/lib/keycloak-admin-ui.js +75 -75
- package/package.json +4 -4
- package/lib/AddKubernetesConnect-D4xTogVo.js.map +0 -1
- package/lib/DetailOrganization-amJJPyq-.js +0 -204
- package/lib/DetailOrganization-amJJPyq-.js.map +0 -1
- package/lib/NewOrganization-D4X_bhyD.js.map +0 -1
- package/lib/PermissionConfigurationDetails-UjUwrvYu.js.map +0 -1
- package/lib/PermissionDetails-gUH5Lf-7.js +0 -413
- package/lib/PermissionDetails-gUH5Lf-7.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { jsx as n, jsxs as F, Fragment as
|
|
2
|
-
import { u as I, am as P,
|
|
1
|
+
import { jsx as n, jsxs as F, Fragment as b } from "react/jsx-runtime";
|
|
2
|
+
import { u as I, am as P, a$ as w, n as z, au as O, aw as T, ao as j, ap as k, aq as y, az as G, a7 as L, a4 as R } from "./index-DsIT2BLV.js";
|
|
3
3
|
import { useState as c } from "react";
|
|
4
4
|
import { useTranslation as H } from "react-i18next";
|
|
5
|
-
const
|
|
5
|
+
const $ = ({
|
|
6
6
|
clientId: m,
|
|
7
7
|
resourceTypeScopes: r
|
|
8
8
|
}) => {
|
|
9
9
|
const { adminClient: S } = I(), { t: a } = H(), {
|
|
10
10
|
control: f,
|
|
11
11
|
formState: { errors: C }
|
|
12
|
-
} = P(), [x, v] = c(!1), [p, A] = c(), [u, d] = c(""), o =
|
|
13
|
-
|
|
12
|
+
} = P(), [x, v] = c(!1), [p, A] = c(), [u, d] = c(""), o = w(m);
|
|
13
|
+
z(
|
|
14
14
|
() => {
|
|
15
15
|
const e = {
|
|
16
16
|
id: m,
|
|
@@ -24,18 +24,18 @@ const _ = ({
|
|
|
24
24
|
A,
|
|
25
25
|
[u]
|
|
26
26
|
);
|
|
27
|
-
const h = (e) => e.map((t, s) => /* @__PURE__ */ n(
|
|
28
|
-
if (!p && !r) return /* @__PURE__ */ n(
|
|
27
|
+
const h = (e) => e.map((t, s) => /* @__PURE__ */ n(R, { value: t, children: typeof t == "string" ? t : t.name }, s));
|
|
28
|
+
if (!p && !r) return /* @__PURE__ */ n(O, {});
|
|
29
29
|
const g = o && r ? r : p?.map((e) => e.name);
|
|
30
30
|
return /* @__PURE__ */ n(
|
|
31
|
-
|
|
31
|
+
T,
|
|
32
32
|
{
|
|
33
33
|
label: a("authorizationScopes"),
|
|
34
|
-
labelIcon: /* @__PURE__ */ n(
|
|
34
|
+
labelIcon: /* @__PURE__ */ n(L, { helpText: a("clientScopesHelp"), fieldLabelId: "scopes" }),
|
|
35
35
|
fieldId: "scopes",
|
|
36
36
|
isRequired: o,
|
|
37
37
|
children: /* @__PURE__ */ n(
|
|
38
|
-
|
|
38
|
+
j,
|
|
39
39
|
{
|
|
40
40
|
name: "scopes",
|
|
41
41
|
defaultValue: [],
|
|
@@ -43,12 +43,12 @@ const _ = ({
|
|
|
43
43
|
rules: o ? { required: a("requiredField") } : {},
|
|
44
44
|
render: ({ field: e }) => {
|
|
45
45
|
const t = e.value.map((s) => s.name);
|
|
46
|
-
return /* @__PURE__ */ F(
|
|
46
|
+
return /* @__PURE__ */ F(b, { children: [
|
|
47
47
|
/* @__PURE__ */ n(
|
|
48
|
-
|
|
48
|
+
k,
|
|
49
49
|
{
|
|
50
50
|
toggleId: "scopes",
|
|
51
|
-
variant:
|
|
51
|
+
variant: y.typeaheadMulti,
|
|
52
52
|
chipGroupProps: {
|
|
53
53
|
numChips: 3,
|
|
54
54
|
expandedText: a("hide"),
|
|
@@ -59,10 +59,10 @@ const _ = ({
|
|
|
59
59
|
selections: t,
|
|
60
60
|
onFilter: (s) => (d(s), h(g || [])),
|
|
61
61
|
onSelect: (s) => {
|
|
62
|
-
const i = typeof s == "string" ? s : s.name,
|
|
62
|
+
const i = typeof s == "string" ? s : s.name, q = e.value.find(
|
|
63
63
|
(l) => l.name === i
|
|
64
64
|
) ? e.value.filter((l) => l.name !== i) : [...e.value, { name: i }];
|
|
65
|
-
e.onChange(
|
|
65
|
+
e.onChange(q);
|
|
66
66
|
},
|
|
67
67
|
onClear: () => {
|
|
68
68
|
d(""), e.onChange([]);
|
|
@@ -71,7 +71,7 @@ const _ = ({
|
|
|
71
71
|
children: h(g || [])
|
|
72
72
|
}
|
|
73
73
|
),
|
|
74
|
-
o && C.scopes && /* @__PURE__ */ n(
|
|
74
|
+
o && C.scopes && /* @__PURE__ */ n(G, { message: a("required") })
|
|
75
75
|
] });
|
|
76
76
|
}
|
|
77
77
|
}
|
|
@@ -80,6 +80,6 @@ const _ = ({
|
|
|
80
80
|
);
|
|
81
81
|
};
|
|
82
82
|
export {
|
|
83
|
-
|
|
83
|
+
$ as S
|
|
84
84
|
};
|
|
85
|
-
//# sourceMappingURL=ScopePicker-
|
|
85
|
+
//# sourceMappingURL=ScopePicker-USX1qW3k.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScopePicker-
|
|
1
|
+
{"version":3,"file":"ScopePicker-USX1qW3k.js","sources":["../src/clients/authorization/ScopePicker.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormGroup, SelectOption } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { useIsAdminPermissionsClient } from \"../../utils/useIsAdminPermissionsClient\";\n\ntype Scope = {\n id: string;\n name: string;\n};\n\ntype ScopePickerProps = {\n clientId: string;\n resourceTypeScopes?: string[];\n};\n\nexport const ScopePicker = ({\n clientId,\n resourceTypeScopes,\n}: ScopePickerProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const [open, setOpen] = useState(false);\n const [scopes, setScopes] = useState<ScopeRepresentation[]>();\n const [search, setSearch] = useState(\"\");\n const isAdminPermissionsClient = useIsAdminPermissionsClient(clientId);\n\n useFetch(\n () => {\n const params = {\n id: clientId,\n first: 0,\n max: 20,\n deep: false,\n name: search,\n };\n return adminClient.clients.listAllScopes(params);\n },\n setScopes,\n [search],\n );\n\n const renderScopes = (scopes: ScopeRepresentation[] | string[]) =>\n scopes.map((option, index) => (\n <SelectOption key={index} value={option}>\n {typeof option === \"string\" ? option : option.name}\n </SelectOption>\n ));\n\n if (!scopes && !resourceTypeScopes) return <KeycloakSpinner />;\n\n const allScopes =\n isAdminPermissionsClient && resourceTypeScopes\n ? resourceTypeScopes\n : scopes?.map((scope) => scope.name!);\n\n return (\n <FormGroup\n label={t(\"authorizationScopes\")}\n labelIcon={\n <HelpItem helpText={t(\"clientScopesHelp\")} fieldLabelId=\"scopes\" />\n }\n fieldId=\"scopes\"\n isRequired={isAdminPermissionsClient}\n >\n <Controller\n name=\"scopes\"\n defaultValue={[]}\n control={control}\n rules={isAdminPermissionsClient ? { required: t(\"requiredField\") } : {}}\n render={({ field }) => {\n const selectedValues = field.value.map((o: Scope) => o.name);\n return (\n <>\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n chipGroupProps={{\n numChips: 3,\n expandedText: t(\"hide\"),\n collapsedText: t(\"showRemaining\"),\n }}\n onToggle={(val) => setOpen(val)}\n isOpen={open}\n selections={selectedValues}\n onFilter={(value) => {\n setSearch(value);\n return renderScopes(allScopes || []);\n }}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedValue\n : (selectedValue as Scope).name;\n const changedValue = field.value.find(\n (o: Scope) => o.name === option,\n )\n ? field.value.filter((item: Scope) => item.name !== option)\n : [...field.value, { name: option }];\n field.onChange(changedValue);\n }}\n onClear={() => {\n setSearch(\"\");\n field.onChange([]);\n }}\n typeAheadAriaLabel={t(\"authorizationScopes\")}\n >\n {renderScopes(allScopes || [])}\n </KeycloakSelect>\n {isAdminPermissionsClient && errors.scopes && (\n <FormErrorText message={t(\"required\")} />\n )}\n </>\n );\n }}\n />\n </FormGroup>\n );\n};\n"],"names":["ScopePicker","clientId","resourceTypeScopes","adminClient","useAdminClient","t","useTranslation","control","errors","useFormContext","open","setOpen","useState","scopes","setScopes","search","setSearch","isAdminPermissionsClient","useIsAdminPermissionsClient","useFetch","params","renderScopes","option","index","jsx","SelectOption","KeycloakSpinner","allScopes","scope","FormGroup","HelpItem","Controller","field","selectedValues","o","jsxs","Fragment","KeycloakSelect","SelectVariant","val","value","selectedValue","changedValue","item","FormErrorText"],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { jsxs as c, Fragment as C, jsx as a } from "react/jsx-runtime";
|
|
2
|
-
import { u as W, a as D,
|
|
3
|
-
import { useTranslation as
|
|
4
|
-
import { useNavigate as
|
|
5
|
-
function
|
|
6
|
-
const { adminClient: i } = W(), { t } =
|
|
2
|
+
import { u as W, a as D, K as S, ar as F, b as E, n as I, bR as m, V as N, F as V, P as j, c as x, aw as K, ao as P, bS as R, a7 as T, A as G, d as H, B as p, bQ as U, bT as k, e as y } from "./index-DsIT2BLV.js";
|
|
3
|
+
import { useTranslation as q } from "react-i18next";
|
|
4
|
+
import { useNavigate as B, Link as h } from "react-router-dom";
|
|
5
|
+
function J() {
|
|
6
|
+
const { adminClient: i } = W(), { t: r } = q(), A = B(), { realm: l } = D(), { addAlert: d, addError: w } = S(), { mode: t, id: n } = F(), s = E({
|
|
7
7
|
mode: "onChange",
|
|
8
8
|
defaultValues: {
|
|
9
9
|
workflowYAML: ""
|
|
10
10
|
}
|
|
11
11
|
}), { control: v, handleSubmit: f, setValue: u } = s;
|
|
12
|
-
|
|
12
|
+
I(
|
|
13
13
|
async () => {
|
|
14
|
-
if (
|
|
14
|
+
if (t !== "create")
|
|
15
15
|
return i.workflows.findOne({
|
|
16
16
|
id: n,
|
|
17
17
|
includeId: !1
|
|
@@ -21,19 +21,19 @@ function _() {
|
|
|
21
21
|
if (!e)
|
|
22
22
|
return;
|
|
23
23
|
const o = { ...e };
|
|
24
|
-
|
|
24
|
+
t === "copy" && (delete o.id, o.name = `${e.name} -- ${r("copy")}`), u("workflowYAML", m.stringify(o));
|
|
25
25
|
},
|
|
26
|
-
[
|
|
26
|
+
[t, n, u, r]
|
|
27
27
|
);
|
|
28
28
|
const g = (e) => {
|
|
29
29
|
const o = m.parse(e);
|
|
30
30
|
if (!o.name)
|
|
31
|
-
throw new Error(
|
|
31
|
+
throw new Error(r("workflowNameRequired"));
|
|
32
32
|
return o;
|
|
33
33
|
}, b = async (e) => {
|
|
34
34
|
try {
|
|
35
35
|
const o = g(e.workflowYAML);
|
|
36
|
-
await i.workflows.update({ id: n }, o), d(
|
|
36
|
+
await i.workflows.update({ id: n }, o), d(r("workflowUpdated"), y.success);
|
|
37
37
|
} catch (o) {
|
|
38
38
|
w("workflowUpdateError", o);
|
|
39
39
|
}
|
|
@@ -42,7 +42,7 @@ function _() {
|
|
|
42
42
|
await i.workflows.createAsYaml({
|
|
43
43
|
realm: l,
|
|
44
44
|
yaml: e.workflowYAML
|
|
45
|
-
}), d(
|
|
45
|
+
}), d(r("workflowCreated"), y.success), A(k({ realm: l }));
|
|
46
46
|
} catch (o) {
|
|
47
47
|
w("workflowCreateError", o);
|
|
48
48
|
}
|
|
@@ -56,36 +56,36 @@ function _() {
|
|
|
56
56
|
update: "updateWorkflowDetails"
|
|
57
57
|
};
|
|
58
58
|
return /* @__PURE__ */ c(C, { children: [
|
|
59
|
-
/* @__PURE__ */ a(
|
|
60
|
-
/* @__PURE__ */ a(
|
|
61
|
-
|
|
59
|
+
/* @__PURE__ */ a(N, { titleKey: M[t], subKey: Y[t] }),
|
|
60
|
+
/* @__PURE__ */ a(V, { ...s, children: /* @__PURE__ */ a(j, { variant: "light", children: /* @__PURE__ */ c(
|
|
61
|
+
x,
|
|
62
62
|
{
|
|
63
63
|
isHorizontal: !0,
|
|
64
|
-
onSubmit: f(
|
|
64
|
+
onSubmit: f(t === "update" ? b : L),
|
|
65
65
|
role: "manage-realm",
|
|
66
66
|
className: "pf-v5-u-mt-lg",
|
|
67
67
|
fineGrainedAccess: !0,
|
|
68
68
|
children: [
|
|
69
69
|
/* @__PURE__ */ a(
|
|
70
|
-
|
|
70
|
+
K,
|
|
71
71
|
{
|
|
72
|
-
label:
|
|
72
|
+
label: r("workflowYAML"),
|
|
73
73
|
labelIcon: /* @__PURE__ */ a(
|
|
74
|
-
|
|
74
|
+
T,
|
|
75
75
|
{
|
|
76
|
-
helpText:
|
|
76
|
+
helpText: r("workflowYAMLHelp"),
|
|
77
77
|
fieldLabelId: "code"
|
|
78
78
|
}
|
|
79
79
|
),
|
|
80
80
|
fieldId: "code",
|
|
81
81
|
isRequired: !0,
|
|
82
82
|
children: /* @__PURE__ */ a(
|
|
83
|
-
|
|
83
|
+
P,
|
|
84
84
|
{
|
|
85
85
|
name: "workflowYAML",
|
|
86
86
|
control: v,
|
|
87
87
|
render: ({ field: e }) => /* @__PURE__ */ a(
|
|
88
|
-
|
|
88
|
+
R,
|
|
89
89
|
{
|
|
90
90
|
id: "workflowYAML",
|
|
91
91
|
"data-testid": "workflowYAML",
|
|
@@ -99,19 +99,19 @@ function _() {
|
|
|
99
99
|
)
|
|
100
100
|
}
|
|
101
101
|
),
|
|
102
|
-
/* @__PURE__ */ c(
|
|
102
|
+
/* @__PURE__ */ c(G, { children: [
|
|
103
103
|
/* @__PURE__ */ a(
|
|
104
|
-
|
|
104
|
+
H,
|
|
105
105
|
{
|
|
106
106
|
formState: s.formState,
|
|
107
107
|
"data-testid": "save",
|
|
108
108
|
allowInvalid: !0,
|
|
109
109
|
allowNonDirty: !0,
|
|
110
|
-
isDisabled:
|
|
111
|
-
children: t
|
|
110
|
+
isDisabled: t === "create" && !s.formState.isDirty,
|
|
111
|
+
children: r(t === "update" ? "save" : "create")
|
|
112
112
|
}
|
|
113
113
|
),
|
|
114
|
-
|
|
114
|
+
t === "update" && /* @__PURE__ */ a(
|
|
115
115
|
p,
|
|
116
116
|
{
|
|
117
117
|
"data-testid": "copy",
|
|
@@ -123,7 +123,7 @@ function _() {
|
|
|
123
123
|
to: U({ realm: l, mode: "copy", id: n })
|
|
124
124
|
}
|
|
125
125
|
),
|
|
126
|
-
children:
|
|
126
|
+
children: r("copy")
|
|
127
127
|
}
|
|
128
128
|
),
|
|
129
129
|
/* @__PURE__ */ a(
|
|
@@ -132,7 +132,7 @@ function _() {
|
|
|
132
132
|
"data-testid": "cancel",
|
|
133
133
|
variant: "link",
|
|
134
134
|
component: (e) => /* @__PURE__ */ a(h, { ...e, to: k({ realm: l }) }),
|
|
135
|
-
children:
|
|
135
|
+
children: r("cancel")
|
|
136
136
|
}
|
|
137
137
|
)
|
|
138
138
|
] })
|
|
@@ -142,6 +142,6 @@ function _() {
|
|
|
142
142
|
] });
|
|
143
143
|
}
|
|
144
144
|
export {
|
|
145
|
-
|
|
145
|
+
J as default
|
|
146
146
|
};
|
|
147
|
-
//# sourceMappingURL=WorkflowDetailForm-
|
|
147
|
+
//# sourceMappingURL=WorkflowDetailForm-BDIXzgoJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowDetailForm-d5rClboG.js","sources":["../src/workflows/WorkflowDetailForm.tsx"],"sourcesContent":["import {\n ActionGroup,\n Button,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { AlertVariant } from \"@patternfly/react-core\";\nimport {\n Controller,\n FormProvider,\n SubmitHandler,\n useForm,\n} from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport yaml from \"yaml\";\nimport { useAdminClient } from \"../admin-client\";\nimport {\n HelpItem,\n FormSubmitButton,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { toWorkflows } from \"./routes/Workflows\";\nimport CodeEditor from \"../components/form/CodeEditor\";\nimport { useParams } from \"../utils/useParams\";\nimport {\n WorkflowDetailParams,\n toWorkflowDetail,\n} from \"./routes/WorkflowDetail\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport WorkflowRepresentation from \"libs/keycloak-admin-client/lib/defs/workflowRepresentation\";\n\ntype AttributeForm = {\n workflowYAML: string;\n};\n\nexport default function WorkflowDetailForm() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { realm } = useRealm();\n const { addAlert, addError } = useAlerts();\n const { mode, id } = useParams<WorkflowDetailParams>();\n const form = useForm<AttributeForm>({\n mode: \"onChange\",\n defaultValues: {\n workflowYAML: \"\",\n },\n });\n const { control, handleSubmit, setValue } = form;\n\n useFetch(\n async () => {\n if (mode === \"create\") {\n return undefined;\n }\n return adminClient.workflows.findOne({\n id: id!,\n includeId: false,\n });\n },\n (workflow) => {\n if (!workflow) {\n return;\n }\n\n const workflowToSet = { ...workflow };\n if (mode === \"copy\") {\n delete workflowToSet.id;\n workflowToSet.name = `${workflow.name} -- ${t(\"copy\")}`;\n }\n\n setValue(\"workflowYAML\", yaml.stringify(workflowToSet));\n },\n [mode, id, setValue, t],\n );\n\n const validateworkflowYAML = (yamlStr: string): WorkflowRepresentation => {\n const json: WorkflowRepresentation = yaml.parse(yamlStr);\n if (!json.name) {\n throw new Error(t(\"workflowNameRequired\"));\n }\n return json;\n };\n\n const onUpdate: SubmitHandler<AttributeForm> = async (data) => {\n try {\n const json = validateworkflowYAML(data.workflowYAML);\n await adminClient.workflows.update({ id }, json);\n addAlert(t(\"workflowUpdated\"), AlertVariant.success);\n } catch (error) {\n addError(\"workflowUpdateError\", error);\n }\n };\n\n const onCreate: SubmitHandler<AttributeForm> = async (data) => {\n try {\n await adminClient.workflows.createAsYaml({\n realm,\n yaml: data.workflowYAML,\n });\n addAlert(t(\"workflowCreated\"), AlertVariant.success);\n void navigate(toWorkflows({ realm }));\n } catch (error) {\n addError(\"workflowCreateError\", error);\n }\n };\n\n const titlekeyMap: Record<WorkflowDetailParams[\"mode\"], string> = {\n copy: \"copyWorkflow\",\n create: \"createWorkflow\",\n update: \"updateWorkflow\",\n };\n\n const subkeyMap: Record<WorkflowDetailParams[\"mode\"], string> = {\n copy: \"copyWorkflowDetails\",\n create: \"createWorkflowDetails\",\n update: \"updateWorkflowDetails\",\n };\n\n return (\n <>\n <ViewHeader titleKey={titlekeyMap[mode]} subKey={subkeyMap[mode]} />\n\n <FormProvider {...form}>\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n onSubmit={\n mode === \"update\"\n ? handleSubmit(onUpdate)\n : handleSubmit(onCreate)\n }\n role={\"manage-realm\"}\n className=\"pf-v5-u-mt-lg\"\n fineGrainedAccess={true}\n >\n <FormGroup\n label={t(\"workflowYAML\")}\n labelIcon={\n <HelpItem\n helpText={t(\"workflowYAMLHelp\")}\n fieldLabelId=\"code\"\n />\n }\n fieldId=\"code\"\n isRequired\n >\n <Controller\n name=\"workflowYAML\"\n control={control}\n render={({ field }) => (\n <CodeEditor\n id=\"workflowYAML\"\n data-testid=\"workflowYAML\"\n value={field.value}\n onChange={field.onChange}\n language=\"yaml\"\n height={600}\n />\n )}\n />\n </FormGroup>\n <ActionGroup>\n <FormSubmitButton\n formState={form.formState}\n data-testid=\"save\"\n allowInvalid\n allowNonDirty\n isDisabled={mode === \"create\" && !form.formState.isDirty}\n >\n {mode === \"update\" ? t(\"save\") : t(\"create\")}\n </FormSubmitButton>\n {mode === \"update\" && (\n <Button\n data-testid=\"copy\"\n variant=\"link\"\n component={(props) => (\n <Link\n {...props}\n to={toWorkflowDetail({ realm, mode: \"copy\", id: id! })}\n />\n )}\n >\n {t(\"copy\")}\n </Button>\n )}\n <Button\n data-testid=\"cancel\"\n variant=\"link\"\n component={(props) => (\n <Link {...props} to={toWorkflows({ realm })} />\n )}\n >\n {t(\"cancel\")}\n </Button>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </FormProvider>\n </>\n );\n}\n"],"names":["WorkflowDetailForm","adminClient","useAdminClient","useTranslation","navigate","useNavigate","realm","useRealm","addAlert","addError","useAlerts","mode","id","useParams","form","useForm","control","handleSubmit","setValue","useFetch","workflow","workflowToSet","yaml","validateworkflowYAML","yamlStr","json","onUpdate","data","AlertVariant","error","onCreate","toWorkflows","titlekeyMap","subkeyMap","jsxs","Fragment","jsx","ViewHeader","FormProvider","PageSection","FormAccess","FormGroup","HelpItem","Controller","field","CodeEditor","ActionGroup","FormSubmitButton","Button","props","Link","toWorkflowDetail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkflowDetailForm-BDIXzgoJ.js","sources":["../src/workflows/WorkflowDetailForm.tsx"],"sourcesContent":["import {\n ActionGroup,\n Button,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { AlertVariant } from \"@patternfly/react-core\";\nimport {\n Controller,\n FormProvider,\n SubmitHandler,\n useForm,\n} from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport yaml from \"yaml\";\nimport { useAdminClient } from \"../admin-client\";\nimport {\n HelpItem,\n FormSubmitButton,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { toWorkflows } from \"./routes/Workflows\";\nimport CodeEditor from \"../components/form/CodeEditor\";\nimport { useParams } from \"../utils/useParams\";\nimport {\n WorkflowDetailParams,\n toWorkflowDetail,\n} from \"./routes/WorkflowDetail\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport WorkflowRepresentation from \"libs/keycloak-admin-client/lib/defs/workflowRepresentation\";\n\ntype AttributeForm = {\n workflowYAML: string;\n};\n\nexport default function WorkflowDetailForm() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { realm } = useRealm();\n const { addAlert, addError } = useAlerts();\n const { mode, id } = useParams<WorkflowDetailParams>();\n const form = useForm<AttributeForm>({\n mode: \"onChange\",\n defaultValues: {\n workflowYAML: \"\",\n },\n });\n const { control, handleSubmit, setValue } = form;\n\n useFetch(\n async () => {\n if (mode === \"create\") {\n return undefined;\n }\n return adminClient.workflows.findOne({\n id: id!,\n includeId: false,\n });\n },\n (workflow) => {\n if (!workflow) {\n return;\n }\n\n const workflowToSet = { ...workflow };\n if (mode === \"copy\") {\n delete workflowToSet.id;\n workflowToSet.name = `${workflow.name} -- ${t(\"copy\")}`;\n }\n\n setValue(\"workflowYAML\", yaml.stringify(workflowToSet));\n },\n [mode, id, setValue, t],\n );\n\n const validateworkflowYAML = (yamlStr: string): WorkflowRepresentation => {\n const json: WorkflowRepresentation = yaml.parse(yamlStr);\n if (!json.name) {\n throw new Error(t(\"workflowNameRequired\"));\n }\n return json;\n };\n\n const onUpdate: SubmitHandler<AttributeForm> = async (data) => {\n try {\n const json = validateworkflowYAML(data.workflowYAML);\n await adminClient.workflows.update({ id }, json);\n addAlert(t(\"workflowUpdated\"), AlertVariant.success);\n } catch (error) {\n addError(\"workflowUpdateError\", error);\n }\n };\n\n const onCreate: SubmitHandler<AttributeForm> = async (data) => {\n try {\n await adminClient.workflows.createAsYaml({\n realm,\n yaml: data.workflowYAML,\n });\n addAlert(t(\"workflowCreated\"), AlertVariant.success);\n void navigate(toWorkflows({ realm }));\n } catch (error) {\n addError(\"workflowCreateError\", error);\n }\n };\n\n const titlekeyMap: Record<WorkflowDetailParams[\"mode\"], string> = {\n copy: \"copyWorkflow\",\n create: \"createWorkflow\",\n update: \"updateWorkflow\",\n };\n\n const subkeyMap: Record<WorkflowDetailParams[\"mode\"], string> = {\n copy: \"copyWorkflowDetails\",\n create: \"createWorkflowDetails\",\n update: \"updateWorkflowDetails\",\n };\n\n return (\n <>\n <ViewHeader titleKey={titlekeyMap[mode]} subKey={subkeyMap[mode]} />\n\n <FormProvider {...form}>\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n onSubmit={\n mode === \"update\"\n ? handleSubmit(onUpdate)\n : handleSubmit(onCreate)\n }\n role={\"manage-realm\"}\n className=\"pf-v5-u-mt-lg\"\n fineGrainedAccess={true}\n >\n <FormGroup\n label={t(\"workflowYAML\")}\n labelIcon={\n <HelpItem\n helpText={t(\"workflowYAMLHelp\")}\n fieldLabelId=\"code\"\n />\n }\n fieldId=\"code\"\n isRequired\n >\n <Controller\n name=\"workflowYAML\"\n control={control}\n render={({ field }) => (\n <CodeEditor\n id=\"workflowYAML\"\n data-testid=\"workflowYAML\"\n value={field.value}\n onChange={field.onChange}\n language=\"yaml\"\n height={600}\n />\n )}\n />\n </FormGroup>\n <ActionGroup>\n <FormSubmitButton\n formState={form.formState}\n data-testid=\"save\"\n allowInvalid\n allowNonDirty\n isDisabled={mode === \"create\" && !form.formState.isDirty}\n >\n {mode === \"update\" ? t(\"save\") : t(\"create\")}\n </FormSubmitButton>\n {mode === \"update\" && (\n <Button\n data-testid=\"copy\"\n variant=\"link\"\n component={(props) => (\n <Link\n {...props}\n to={toWorkflowDetail({ realm, mode: \"copy\", id: id! })}\n />\n )}\n >\n {t(\"copy\")}\n </Button>\n )}\n <Button\n data-testid=\"cancel\"\n variant=\"link\"\n component={(props) => (\n <Link {...props} to={toWorkflows({ realm })} />\n )}\n >\n {t(\"cancel\")}\n </Button>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </FormProvider>\n </>\n );\n}\n"],"names":["WorkflowDetailForm","adminClient","useAdminClient","t","useTranslation","navigate","useNavigate","realm","useRealm","addAlert","addError","useAlerts","mode","id","useParams","form","useForm","control","handleSubmit","setValue","useFetch","workflow","workflowToSet","yaml","validateworkflowYAML","yamlStr","json","onUpdate","data","AlertVariant","error","onCreate","toWorkflows","titlekeyMap","subkeyMap","jsxs","Fragment","jsx","ViewHeader","FormProvider","PageSection","FormAccess","FormGroup","HelpItem","Controller","field","CodeEditor","ActionGroup","FormSubmitButton","Button","props","Link","toWorkflowDetail"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsxs as y, Fragment as
|
|
2
|
-
import { u as
|
|
1
|
+
import { jsxs as y, Fragment as E, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { u as S, a as v, K as x, aa as A, l as I, e as p, V as R, bP as P, P as U, aI as V, I as L, bQ as r, ax as T, B as j } from "./index-DsIT2BLV.js";
|
|
3
3
|
import { useState as g } from "react";
|
|
4
|
-
import { useTranslation as
|
|
5
|
-
import { useNavigate as
|
|
4
|
+
import { useTranslation as N } from "react-i18next";
|
|
5
|
+
import { useNavigate as F, Link as b } from "react-router-dom";
|
|
6
6
|
function z() {
|
|
7
|
-
const { adminClient: l } =
|
|
7
|
+
const { adminClient: l } = S(), { realm: a } = v(), { t } = N(), m = F(), { addAlert: w, addError: f } = x(), [u, h] = g(0), k = () => h(u + 1), [s, i] = g(), C = async () => (await l.workflows.find()).sort(
|
|
8
8
|
(d, n) => {
|
|
9
9
|
const c = d.name ?? "", B = n.name ?? "";
|
|
10
10
|
return c.localeCompare(B);
|
|
@@ -22,13 +22,13 @@ function z() {
|
|
|
22
22
|
} catch (c) {
|
|
23
23
|
f("workflowUpdateError", c);
|
|
24
24
|
}
|
|
25
|
-
}, [K, W] =
|
|
25
|
+
}, [K, W] = A({
|
|
26
26
|
titleKey: "workflowDeleteConfirm",
|
|
27
27
|
messageKey: t("workflowDeleteConfirmDialog", {
|
|
28
28
|
selectedRoleName: s ? s.name : ""
|
|
29
29
|
}),
|
|
30
30
|
continueButtonLabel: "delete",
|
|
31
|
-
continueButtonVariant:
|
|
31
|
+
continueButtonVariant: I.danger,
|
|
32
32
|
onConfirm: async () => {
|
|
33
33
|
try {
|
|
34
34
|
await l.workflows.delById({ id: s.id }), i(void 0), w(t("workflowDeletedSuccess"), p.success), k();
|
|
@@ -37,22 +37,22 @@ function z() {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
-
return /* @__PURE__ */ y(
|
|
40
|
+
return /* @__PURE__ */ y(E, { children: [
|
|
41
41
|
/* @__PURE__ */ o(
|
|
42
|
-
|
|
42
|
+
R,
|
|
43
43
|
{
|
|
44
44
|
titleKey: "titleWorkflows",
|
|
45
45
|
subKey: "workflowsExplain",
|
|
46
|
-
helpUrl:
|
|
46
|
+
helpUrl: P.workflowsUrl
|
|
47
47
|
}
|
|
48
48
|
),
|
|
49
|
-
/* @__PURE__ */ y(
|
|
49
|
+
/* @__PURE__ */ y(U, { variant: "light", padding: { default: "noPadding" }, children: [
|
|
50
50
|
/* @__PURE__ */ o(W, {}),
|
|
51
51
|
/* @__PURE__ */ o(
|
|
52
|
-
|
|
52
|
+
V,
|
|
53
53
|
{
|
|
54
54
|
toolbarItem: /* @__PURE__ */ o(
|
|
55
|
-
|
|
55
|
+
j,
|
|
56
56
|
{
|
|
57
57
|
"data-testid": "create-workflow",
|
|
58
58
|
component: (e) => /* @__PURE__ */ o(
|
|
@@ -85,7 +85,7 @@ function z() {
|
|
|
85
85
|
name: "status",
|
|
86
86
|
displayKey: "status",
|
|
87
87
|
cellRenderer: (e) => /* @__PURE__ */ o(
|
|
88
|
-
|
|
88
|
+
T,
|
|
89
89
|
{
|
|
90
90
|
"data-testid": `toggle-enabled-${e.name}`,
|
|
91
91
|
label: t("enabled"),
|
|
@@ -115,7 +115,7 @@ function z() {
|
|
|
115
115
|
loader: C,
|
|
116
116
|
ariaLabelKey: "workflows",
|
|
117
117
|
emptyState: /* @__PURE__ */ o(
|
|
118
|
-
|
|
118
|
+
L,
|
|
119
119
|
{
|
|
120
120
|
message: t("emptyWorkflows"),
|
|
121
121
|
instructions: t("emptyWorkflowsInstructions"),
|
|
@@ -136,4 +136,4 @@ function z() {
|
|
|
136
136
|
export {
|
|
137
137
|
z as default
|
|
138
138
|
};
|
|
139
|
-
//# sourceMappingURL=WorkflowsSection-
|
|
139
|
+
//# sourceMappingURL=WorkflowsSection-Htg3cqfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowsSection-
|
|
1
|
+
{"version":3,"file":"WorkflowsSection-Htg3cqfo.js","sources":["../src/workflows/WorkflowsSection.tsx"],"sourcesContent":["import {\n AlertVariant,\n Button,\n ButtonVariant,\n PageSection,\n Switch,\n} from \"@patternfly/react-core\";\nimport {\n Action,\n KeycloakDataTable,\n ListEmptyState,\n useAlerts,\n} from \"@keycloak/keycloak-ui-shared\";\nimport WorkflowRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/workflowRepresentation\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport helpUrls from \"../help-urls\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { toWorkflowDetail } from \"./routes/WorkflowDetail\";\n\nexport default function WorkflowsSection() {\n const { adminClient } = useAdminClient();\n\n const { realm } = useRealm();\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const [selectedWorkflow, setSelectedWorkflow] =\n useState<WorkflowRepresentation>();\n\n const loader = async () => {\n const workflows = await adminClient.workflows.find();\n return workflows.sort(\n (a: WorkflowRepresentation, b: WorkflowRepresentation) => {\n const nameA = a.name ?? \"\";\n const nameB = b.name ?? \"\";\n return nameA.localeCompare(nameB);\n },\n );\n };\n\n const toggleEnabled = async (workflow: WorkflowRepresentation) => {\n const enabled = !(workflow.enabled ?? true);\n const workflowToUpdate = { ...workflow, enabled };\n try {\n await adminClient.workflows.update(\n { id: workflow.id! },\n workflowToUpdate,\n );\n\n addAlert(\n workflowToUpdate.enabled ? t(\"workflowEnabled\") : t(\"workflowDisabled\"),\n AlertVariant.success,\n );\n refresh();\n } catch (error) {\n addError(\"workflowUpdateError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"workflowDeleteConfirm\",\n messageKey: t(\"workflowDeleteConfirmDialog\", {\n selectedRoleName: selectedWorkflow ? selectedWorkflow!.name : \"\",\n }),\n continueButtonLabel: \"delete\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await adminClient.workflows.delById({ id: selectedWorkflow!.id! });\n setSelectedWorkflow(undefined);\n addAlert(t(\"workflowDeletedSuccess\"), AlertVariant.success);\n refresh();\n } catch (error) {\n addError(\"workflowDeleteError\", error);\n }\n },\n });\n\n return (\n <>\n <ViewHeader\n titleKey=\"titleWorkflows\"\n subKey=\"workflowsExplain\"\n helpUrl={helpUrls.workflowsUrl}\n />\n <PageSection variant=\"light\" padding={{ default: \"noPadding\" }}>\n <DeleteConfirm />\n <KeycloakDataTable\n key={key}\n toolbarItem={\n <Button\n data-testid=\"create-workflow\"\n component={(props) => (\n <Link\n {...props}\n to={toWorkflowDetail({ realm, mode: \"create\", id: \"new\" })}\n />\n )}\n >\n {t(\"createWorkflow\")}\n </Button>\n }\n columns={[\n {\n name: \"name\",\n displayKey: \"name\",\n cellRenderer: (row: WorkflowRepresentation) => (\n <Link\n to={toWorkflowDetail({ realm, mode: \"update\", id: row.id! })}\n >\n {row.name}\n </Link>\n ),\n },\n {\n name: \"id\",\n displayKey: \"id\",\n },\n {\n name: \"status\",\n displayKey: \"status\",\n cellRenderer: (workflow: WorkflowRepresentation) => (\n <Switch\n data-testid={`toggle-enabled-${workflow.name}`}\n label={t(\"enabled\")}\n labelOff={t(\"disabled\")}\n isChecked={workflow.enabled ?? true}\n onChange={() => toggleEnabled(workflow)}\n />\n ),\n },\n ]}\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (workflow) => {\n setSelectedWorkflow(workflow);\n toggleDeleteDialog();\n },\n } as Action<WorkflowRepresentation>,\n {\n title: t(\"copy\"),\n onRowClick: (workflow) => {\n setSelectedWorkflow(workflow);\n void navigate(\n toWorkflowDetail({ realm, mode: \"copy\", id: workflow.id! }),\n );\n },\n } as Action<WorkflowRepresentation>,\n ]}\n loader={loader}\n ariaLabelKey=\"workflows\"\n emptyState={\n <ListEmptyState\n message={t(\"emptyWorkflows\")}\n instructions={t(\"emptyWorkflowsInstructions\")}\n primaryActionText={t(\"createWorkflow\")}\n onPrimaryAction={() =>\n void navigate(\n toWorkflowDetail({ realm, mode: \"create\", id: \"new\" }),\n )\n }\n />\n }\n />\n </PageSection>\n </>\n );\n}\n"],"names":["WorkflowsSection","adminClient","useAdminClient","realm","useRealm","useTranslation","navigate","useNavigate","addAlert","addError","useAlerts","key","setKey","useState","refresh","selectedWorkflow","setSelectedWorkflow","loader","a","b","nameA","nameB","toggleEnabled","workflow","enabled","workflowToUpdate","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","jsxs","Fragment","jsx","ViewHeader","helpUrls","PageSection","KeycloakDataTable","Button","props","Link","toWorkflowDetail","row","Switch","ListEmptyState"],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { default as AuthenticationFlowRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/authenticationFlowRepresentation';
|
|
2
2
|
import { default as RealmRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/realmRepresentation';
|
|
3
|
+
import { UsedByClientRef } from '../components/role-mapping/resource';
|
|
4
|
+
export type { UsedByClientRef };
|
|
3
5
|
type UsedBy = "SPECIFIC_CLIENTS" | "SPECIFIC_PROVIDERS" | "DEFAULT";
|
|
4
6
|
export type AuthenticationType = AuthenticationFlowRepresentation & {
|
|
5
7
|
usedBy?: {
|
|
6
8
|
type?: UsedBy;
|
|
7
9
|
values: string[];
|
|
10
|
+
clientRefs?: UsedByClientRef[];
|
|
8
11
|
};
|
|
9
12
|
realm: RealmRepresentation;
|
|
10
13
|
};
|
|
11
14
|
export declare const REALM_FLOWS: Map<string, string>;
|
|
12
|
-
export {};
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { ClientScopeDefaultOptionalType } from '../../components/client-scope/ClientScopeTypes';
|
|
2
|
-
export declare const OID4VC_ATTRIBUTE_KEYS: readonly ["vc.credential_configuration_id", "vc.credential_identifier", "vc.issuer_did", "vc.expiry_in_seconds", "vc.credential_build_config.token_jws_type", "vc.supported_credential_types", "vc.verifiable_credential_type", "vc.credential_build_config.sd_jwt.visible_claims", "vc.display", "vc.binding_required", "vc.binding_required_proof_types", "vc.cryptographic_binding_methods_supported", "vc.refresh_interval_in_seconds"];
|
|
3
|
-
/**
|
|
4
|
-
|
|
2
|
+
export declare const OID4VC_ATTRIBUTE_KEYS: readonly ["vc.credential_configuration_id", "vc.credential_identifier", "vc.issuer_did", "vc.expiry_in_seconds", "vc.credential_build_config.token_jws_type", "vc.supported_credential_types", "vc.verifiable_credential_type", "vc.credential_build_config.sd_jwt.visible_claims", "vc.display", "vc.binding_required", "vc.binding_required_proof_types", "vc.cryptographic_binding_methods_supported", "vc.key_attestations_required", "vc.key_attestations_required.key_storage", "vc.key_attestations_required.user_authentication", "vc.refresh_interval_in_seconds"];
|
|
3
|
+
/**
|
|
4
|
+
* Normalize known optional OID4VC attributes when they are empty.
|
|
5
|
+
*
|
|
6
|
+
* On create, empty values are omitted so backend defaults can be applied.
|
|
7
|
+
* On edit, empty values are sent as null so the backend receives an explicit clear signal.
|
|
8
|
+
*/
|
|
9
|
+
export declare const removeEmptyOid4vcAttributes: (values: ClientScopeDefaultOptionalType, isEdit?: boolean) => ClientScopeDefaultOptionalType;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { default as ClientRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/clientRepresentation';
|
|
2
|
+
export type CreateStreamFormFields = {
|
|
3
|
+
profile: "SSF_1_0" | "SSE_CAEP";
|
|
4
|
+
deliveryMethod: "PUSH" | "POLL";
|
|
5
|
+
endpointUrl: string;
|
|
6
|
+
authHeader: string;
|
|
7
|
+
eventsRequested: string[];
|
|
8
|
+
description: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const getDefaultCreateStreamValues: (profile?: string) => CreateStreamFormFields;
|
|
11
|
+
export type CreateStreamFormProps = {
|
|
12
|
+
client: ClientRepresentation;
|
|
13
|
+
receiverSupportedEvents: string[];
|
|
14
|
+
nativelyEmittedEvents: string[];
|
|
15
|
+
onCancel: () => void;
|
|
16
|
+
onSuccess: () => void;
|
|
17
|
+
};
|
|
18
|
+
export declare const CreateStreamForm: (props: CreateStreamFormProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const DELIVERY_METHOD_PUSH_URI = "urn:ietf:rfc:8935";
|
|
2
|
+
export declare const DELIVERY_METHOD_POLL_URI = "urn:ietf:rfc:8936";
|
|
3
|
+
export declare const isPollDeliveryMethod: (method: string | undefined) => boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Best-effort URL validation for the receiver's push endpoint. Uses
|
|
6
|
+
* the URL constructor (no regex juggling) and additionally requires
|
|
7
|
+
* an http/https protocol — the SSF dispatcher only knows how to push
|
|
8
|
+
* over HTTP, so accepting e.g. ftp:// or javascript: would just
|
|
9
|
+
* dead-letter the queued events on first push attempt. An empty
|
|
10
|
+
* string is treated as "not yet typed" and not validated here so the
|
|
11
|
+
* field's existing isRequired check owns that case.
|
|
12
|
+
*/
|
|
13
|
+
export declare const isValidPushEndpointUrl: (value: string) => boolean;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { default as ClientRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/clientRepresentation';
|
|
2
1
|
import { SelectVariant } from '@keycloak/keycloak-ui-shared';
|
|
3
2
|
import { ComponentProps } from '../dynamic/components';
|
|
3
|
+
type ClientKey = "id" | "clientId";
|
|
4
4
|
type ClientSelectProps = Omit<ComponentProps, "convertToName"> & {
|
|
5
5
|
variant?: `${SelectVariant}`;
|
|
6
6
|
isRequired?: boolean;
|
|
7
|
-
clientKey?:
|
|
8
|
-
placeholderText?: string;
|
|
7
|
+
clientKey?: ClientKey;
|
|
9
8
|
};
|
|
10
|
-
export declare const ClientSelect: ({ name, label, helpText, defaultValue, isDisabled, isRequired, variant, clientKey,
|
|
9
|
+
export declare const ClientSelect: ({ name, label, helpText, defaultValue, isDisabled, required, isRequired, variant, clientKey, }: ClientSelectProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
10
|
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as ClientRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/clientRepresentation';
|
|
2
|
+
type ClientSelectModalProps = {
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
onSelect: (clients: ClientRepresentation[]) => void;
|
|
5
|
+
isRadio?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare const ClientSelectModal: ({ onClose, onSelect, isRadio, }: ClientSelectModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { default as GroupRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/groupRepresentation';
|
|
2
|
+
import { default as OrganizationRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/organizationRepresentation';
|
|
2
3
|
export type GroupPickerDialogProps = {
|
|
3
4
|
id?: string;
|
|
4
5
|
type: "selectOne" | "selectMany";
|
|
@@ -9,7 +10,12 @@ export type GroupPickerDialogProps = {
|
|
|
9
10
|
};
|
|
10
11
|
canBrowse?: boolean;
|
|
11
12
|
isMove?: boolean;
|
|
12
|
-
|
|
13
|
+
/**
|
|
14
|
+
* When set, the dialog opens on the organizations linked to this identity provider and the groups are the ones of
|
|
15
|
+
* the organization picked there. Without it the dialog browses the groups of the resource from the context.
|
|
16
|
+
*/
|
|
17
|
+
identityProviderAlias?: string;
|
|
18
|
+
onConfirm: (groups: GroupRepresentation[] | undefined, organization?: OrganizationRepresentation) => void;
|
|
13
19
|
onClose: () => void;
|
|
14
20
|
};
|
|
15
|
-
export declare const GroupPickerDialog: ({ id, type, filterGroups, text, canBrowse, isMove, onClose, onConfirm, }: GroupPickerDialogProps) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare const GroupPickerDialog: ({ id, type, filterGroups, text, canBrowse, isMove, identityProviderAlias, onClose, onConfirm, }: GroupPickerDialogProps) => import("react/jsx-runtime").JSX.Element;
|