@thunderid/react 1.7.0 → 1.9.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/dist/cjs/components/account/UserProfile/BaseUserProfile.cjs +1 -1
- package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs +15 -4
- package/dist/cjs/components/admin/AgentCreate/AgentCreate.cjs.map +1 -1
- package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs +49 -10
- package/dist/cjs/components/admin/AgentDetails/AgentDetails.cjs.map +1 -1
- package/dist/cjs/components/admin/AgentDetails/BaseAgentDetails.cjs +25 -7
- package/dist/cjs/components/admin/AgentDetails/BaseAgentDetails.cjs.map +1 -1
- package/dist/cjs/components/admin/AgentList/AgentList.cjs +13 -4
- package/dist/cjs/components/admin/AgentList/AgentList.cjs.map +1 -1
- package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs +70 -0
- package/dist/cjs/components/admin/ApplicationCreate/ApplicationCreate.cjs.map +1 -0
- package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs +135 -0
- package/dist/cjs/components/admin/ApplicationCreate/BaseApplicationCreate.cjs.map +1 -0
- package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs +95 -0
- package/dist/cjs/components/admin/ApplicationDetails/ApplicationDetails.cjs.map +1 -0
- package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs +255 -0
- package/dist/cjs/components/admin/ApplicationDetails/BaseApplicationDetails.cjs.map +1 -0
- package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs +55 -0
- package/dist/cjs/components/admin/ApplicationList/ApplicationList.cjs.map +1 -0
- package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs +95 -0
- package/dist/cjs/components/admin/ApplicationList/BaseApplicationList.cjs.map +1 -0
- package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs +8 -2
- package/dist/cjs/components/admin/GroupCreate/GroupCreate.cjs.map +1 -1
- package/dist/cjs/components/admin/GroupList/GroupList.cjs +10 -3
- package/dist/cjs/components/admin/GroupList/GroupList.cjs.map +1 -1
- package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs +49 -11
- package/dist/cjs/components/admin/GroupMembers/GroupMembers.cjs.map +1 -1
- package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs +50 -15
- package/dist/cjs/components/admin/RoleAssignments/RoleAssignments.cjs.map +1 -1
- package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs +8 -2
- package/dist/cjs/components/admin/RoleCreate/RoleCreate.cjs.map +1 -1
- package/dist/cjs/components/admin/RoleList/RoleList.cjs +10 -3
- package/dist/cjs/components/admin/RoleList/RoleList.cjs.map +1 -1
- package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs +8 -2
- package/dist/cjs/components/admin/RolePermissions/RolePermissions.cjs.map +1 -1
- package/dist/cjs/components/admin/UserCreate/UserCreate.cjs +15 -4
- package/dist/cjs/components/admin/UserCreate/UserCreate.cjs.map +1 -1
- package/dist/cjs/components/admin/UserDetails/BaseUserDetails.cjs +32 -14
- package/dist/cjs/components/admin/UserDetails/BaseUserDetails.cjs.map +1 -1
- package/dist/cjs/components/admin/UserDetails/UserDetails.cjs +45 -10
- package/dist/cjs/components/admin/UserDetails/UserDetails.cjs.map +1 -1
- package/dist/cjs/components/admin/UserList/UserList.cjs +13 -4
- package/dist/cjs/components/admin/UserList/UserList.cjs.map +1 -1
- package/dist/cjs/components/admin/shared/AccountLifecycleParts.cjs +105 -0
- package/dist/cjs/components/admin/shared/AccountLifecycleParts.cjs.map +1 -0
- package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs +62 -0
- package/dist/cjs/components/admin/shared/ApplicationFormFields.cjs.map +1 -0
- package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs +49 -0
- package/dist/cjs/components/admin/shared/ClientSecretNotice.cjs.map +1 -0
- package/dist/cjs/components/auth/AcceptInvite/BaseAcceptInvite.cjs +4 -5
- package/dist/cjs/components/auth/AcceptInvite/BaseAcceptInvite.cjs.map +1 -1
- package/dist/cjs/components/auth/InviteUser/InviteUser.cjs +1 -1
- package/dist/cjs/components/auth/SignIn/SignIn.cjs +5 -5
- package/dist/cjs/components/auth/SignIn/SignIn.cjs.map +1 -1
- package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs +4 -5
- package/dist/cjs/components/auth/flow/AuthOptionFactory.cjs.map +1 -1
- package/dist/cjs/components/auth/flow/Consent.cjs +53 -28
- package/dist/cjs/components/auth/flow/Consent.cjs.map +1 -1
- package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.cjs +104 -0
- package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.cjs.map +1 -0
- package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.styles.cjs +59 -0
- package/dist/cjs/components/auth/flow/ConsentAuthorizationDetail.styles.cjs.map +1 -0
- package/dist/cjs/components/auth/flow/ConsentDetailField.cjs +171 -0
- package/dist/cjs/components/auth/flow/ConsentDetailField.cjs.map +1 -0
- package/dist/cjs/components/auth/flow/ConsentDetailField.styles.cjs +85 -0
- package/dist/cjs/components/auth/flow/ConsentDetailField.styles.cjs.map +1 -0
- package/dist/cjs/components/auth/flow/ConsentDetailText.cjs +63 -0
- package/dist/cjs/components/auth/flow/ConsentDetailText.cjs.map +1 -0
- package/dist/cjs/components/auth/flow/ConsentDetailText.styles.cjs +83 -0
- package/dist/cjs/components/auth/flow/ConsentDetailText.styles.cjs.map +1 -0
- package/dist/cjs/components/auth/flow/FieldFactory.cjs +1 -1
- package/dist/cjs/components/auth/flow/resolveConsentText.cjs +25 -0
- package/dist/cjs/components/auth/flow/resolveConsentText.cjs.map +1 -0
- package/dist/cjs/components/primitives/KeyValueInput/KeyValueInput.cjs +1 -1
- package/dist/cjs/components/primitives/MultiInput/MultiInput.cjs +1 -1
- package/dist/cjs/components/primitives/PasswordField/PasswordField.cjs +1 -1
- package/dist/cjs/hooks/auth/useConsentDetailField.cjs +357 -0
- package/dist/cjs/hooks/auth/useConsentDetailField.cjs.map +1 -0
- package/dist/cjs/hooks/management/useAccountLifecycle.cjs +59 -0
- package/dist/cjs/hooks/management/useAccountLifecycle.cjs.map +1 -0
- package/dist/cjs/hooks/management/useManagementEndpoint.cjs.map +1 -1
- package/dist/cjs/hooks/management/useManagementRequestConfig.cjs +41 -0
- package/dist/cjs/hooks/management/useManagementRequestConfig.cjs.map +1 -0
- package/dist/cjs/index.cjs +1130 -187
- package/dist/cjs/utils/formatConsentDetailValue.cjs +26 -0
- package/dist/cjs/utils/formatConsentDetailValue.cjs.map +1 -0
- package/dist/cjs/utils/getConsentDetailLayout.cjs +44 -0
- package/dist/cjs/utils/getConsentDetailLayout.cjs.map +1 -0
- package/dist/cjs/utils/getConsentDetailListDisplay.cjs +30 -0
- package/dist/cjs/utils/getConsentDetailListDisplay.cjs.map +1 -0
- package/dist/cjs/utils/isConsentApprovalBlocked.cjs +41 -0
- package/dist/cjs/utils/isConsentApprovalBlocked.cjs.map +1 -0
- package/dist/cjs/utils/isConsentDetailPlainList.cjs +24 -0
- package/dist/cjs/utils/isConsentDetailPlainList.cjs.map +1 -0
- package/dist/cjs/utils/isConsentDetailStructured.cjs +15 -0
- package/dist/cjs/utils/isConsentDetailStructured.cjs.map +1 -0
- package/dist/cjs/utils/isConsentDetailTextClamped.cjs +25 -0
- package/dist/cjs/utils/isConsentDetailTextClamped.cjs.map +1 -0
- package/dist/components/account/UserProfile/BaseUserProfile.js +1 -1
- package/dist/components/admin/AgentCreate/AgentCreate.d.ts.map +1 -1
- package/dist/components/admin/AgentCreate/AgentCreate.js +16 -5
- package/dist/components/admin/AgentCreate/AgentCreate.js.map +1 -1
- package/dist/components/admin/AgentDetails/AgentDetails.d.ts +8 -1
- package/dist/components/admin/AgentDetails/AgentDetails.d.ts.map +1 -1
- package/dist/components/admin/AgentDetails/AgentDetails.js +50 -11
- package/dist/components/admin/AgentDetails/AgentDetails.js.map +1 -1
- package/dist/components/admin/AgentDetails/BaseAgentDetails.d.ts +21 -1
- package/dist/components/admin/AgentDetails/BaseAgentDetails.d.ts.map +1 -1
- package/dist/components/admin/AgentDetails/BaseAgentDetails.js +25 -7
- package/dist/components/admin/AgentDetails/BaseAgentDetails.js.map +1 -1
- package/dist/components/admin/AgentList/AgentList.d.ts.map +1 -1
- package/dist/components/admin/AgentList/AgentList.js +14 -5
- package/dist/components/admin/AgentList/AgentList.js.map +1 -1
- package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts +30 -0
- package/dist/components/admin/ApplicationCreate/ApplicationCreate.d.ts.map +1 -0
- package/dist/components/admin/ApplicationCreate/ApplicationCreate.js +66 -0
- package/dist/components/admin/ApplicationCreate/ApplicationCreate.js.map +1 -0
- package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts +80 -0
- package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.d.ts.map +1 -0
- package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js +131 -0
- package/dist/components/admin/ApplicationCreate/BaseApplicationCreate.js.map +1 -0
- package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts +64 -0
- package/dist/components/admin/ApplicationDetails/ApplicationDetails.d.ts.map +1 -0
- package/dist/components/admin/ApplicationDetails/ApplicationDetails.js +92 -0
- package/dist/components/admin/ApplicationDetails/ApplicationDetails.js.map +1 -0
- package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts +111 -0
- package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.d.ts.map +1 -0
- package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js +251 -0
- package/dist/components/admin/ApplicationDetails/BaseApplicationDetails.js.map +1 -0
- package/dist/components/admin/ApplicationList/ApplicationList.d.ts +18 -0
- package/dist/components/admin/ApplicationList/ApplicationList.d.ts.map +1 -0
- package/dist/components/admin/ApplicationList/ApplicationList.js +51 -0
- package/dist/components/admin/ApplicationList/ApplicationList.js.map +1 -0
- package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts +55 -0
- package/dist/components/admin/ApplicationList/BaseApplicationList.d.ts.map +1 -0
- package/dist/components/admin/ApplicationList/BaseApplicationList.js +93 -0
- package/dist/components/admin/ApplicationList/BaseApplicationList.js.map +1 -0
- package/dist/components/admin/GroupCreate/GroupCreate.d.ts.map +1 -1
- package/dist/components/admin/GroupCreate/GroupCreate.js +9 -3
- package/dist/components/admin/GroupCreate/GroupCreate.js.map +1 -1
- package/dist/components/admin/GroupList/GroupList.d.ts.map +1 -1
- package/dist/components/admin/GroupList/GroupList.js +11 -4
- package/dist/components/admin/GroupList/GroupList.js.map +1 -1
- package/dist/components/admin/GroupMembers/GroupMembers.d.ts +7 -0
- package/dist/components/admin/GroupMembers/GroupMembers.d.ts.map +1 -1
- package/dist/components/admin/GroupMembers/GroupMembers.js +50 -12
- package/dist/components/admin/GroupMembers/GroupMembers.js.map +1 -1
- package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts +7 -0
- package/dist/components/admin/RoleAssignments/RoleAssignments.d.ts.map +1 -1
- package/dist/components/admin/RoleAssignments/RoleAssignments.js +51 -16
- package/dist/components/admin/RoleAssignments/RoleAssignments.js.map +1 -1
- package/dist/components/admin/RoleCreate/RoleCreate.d.ts.map +1 -1
- package/dist/components/admin/RoleCreate/RoleCreate.js +9 -3
- package/dist/components/admin/RoleCreate/RoleCreate.js.map +1 -1
- package/dist/components/admin/RoleList/RoleList.d.ts.map +1 -1
- package/dist/components/admin/RoleList/RoleList.js +11 -4
- package/dist/components/admin/RoleList/RoleList.js.map +1 -1
- package/dist/components/admin/RolePermissions/RolePermissions.d.ts.map +1 -1
- package/dist/components/admin/RolePermissions/RolePermissions.js +9 -3
- package/dist/components/admin/RolePermissions/RolePermissions.js.map +1 -1
- package/dist/components/admin/UserCreate/UserCreate.d.ts.map +1 -1
- package/dist/components/admin/UserCreate/UserCreate.js +16 -5
- package/dist/components/admin/UserCreate/UserCreate.js.map +1 -1
- package/dist/components/admin/UserDetails/BaseUserDetails.d.ts +22 -1
- package/dist/components/admin/UserDetails/BaseUserDetails.d.ts.map +1 -1
- package/dist/components/admin/UserDetails/BaseUserDetails.js +32 -14
- package/dist/components/admin/UserDetails/BaseUserDetails.js.map +1 -1
- package/dist/components/admin/UserDetails/UserDetails.d.ts +15 -1
- package/dist/components/admin/UserDetails/UserDetails.d.ts.map +1 -1
- package/dist/components/admin/UserDetails/UserDetails.js +46 -11
- package/dist/components/admin/UserDetails/UserDetails.js.map +1 -1
- package/dist/components/admin/UserList/UserList.d.ts.map +1 -1
- package/dist/components/admin/UserList/UserList.js +14 -5
- package/dist/components/admin/UserList/UserList.js.map +1 -1
- package/dist/components/admin/shared/AccountLifecycleParts.d.ts +32 -0
- package/dist/components/admin/shared/AccountLifecycleParts.d.ts.map +1 -0
- package/dist/components/admin/shared/AccountLifecycleParts.js +101 -0
- package/dist/components/admin/shared/AccountLifecycleParts.js.map +1 -0
- package/dist/components/admin/shared/ApplicationFormFields.d.ts +35 -0
- package/dist/components/admin/shared/ApplicationFormFields.d.ts.map +1 -0
- package/dist/components/admin/shared/ApplicationFormFields.js +59 -0
- package/dist/components/admin/shared/ApplicationFormFields.js.map +1 -0
- package/dist/components/admin/shared/ClientSecretNotice.d.ts +16 -0
- package/dist/components/admin/shared/ClientSecretNotice.d.ts.map +1 -0
- package/dist/components/admin/shared/ClientSecretNotice.js +47 -0
- package/dist/components/admin/shared/ClientSecretNotice.js.map +1 -0
- package/dist/components/auth/AcceptInvite/BaseAcceptInvite.d.ts.map +1 -1
- package/dist/components/auth/AcceptInvite/BaseAcceptInvite.js +5 -6
- package/dist/components/auth/AcceptInvite/BaseAcceptInvite.js.map +1 -1
- package/dist/components/auth/InviteUser/InviteUser.js +1 -1
- package/dist/components/auth/SignIn/SignIn.d.ts.map +1 -1
- package/dist/components/auth/SignIn/SignIn.js +6 -6
- package/dist/components/auth/SignIn/SignIn.js.map +1 -1
- package/dist/components/auth/flow/AuthOptionFactory.d.ts.map +1 -1
- package/dist/components/auth/flow/AuthOptionFactory.js +5 -6
- package/dist/components/auth/flow/AuthOptionFactory.js.map +1 -1
- package/dist/components/auth/flow/Consent.d.ts +6 -0
- package/dist/components/auth/flow/Consent.d.ts.map +1 -1
- package/dist/components/auth/flow/Consent.js +54 -29
- package/dist/components/auth/flow/Consent.js.map +1 -1
- package/dist/components/auth/flow/ConsentAuthorizationDetail.d.ts +68 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.d.ts.map +1 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.js +100 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.js.map +1 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.d.ts +10 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.d.ts.map +1 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.js +57 -0
- package/dist/components/auth/flow/ConsentAuthorizationDetail.styles.js.map +1 -0
- package/dist/components/auth/flow/ConsentDetailField.d.ts +39 -0
- package/dist/components/auth/flow/ConsentDetailField.d.ts.map +1 -0
- package/dist/components/auth/flow/ConsentDetailField.js +168 -0
- package/dist/components/auth/flow/ConsentDetailField.js.map +1 -0
- package/dist/components/auth/flow/ConsentDetailField.styles.d.ts +11 -0
- package/dist/components/auth/flow/ConsentDetailField.styles.d.ts.map +1 -0
- package/dist/components/auth/flow/ConsentDetailField.styles.js +83 -0
- package/dist/components/auth/flow/ConsentDetailField.styles.js.map +1 -0
- package/dist/components/auth/flow/ConsentDetailText.d.ts +53 -0
- package/dist/components/auth/flow/ConsentDetailText.d.ts.map +1 -0
- package/dist/components/auth/flow/ConsentDetailText.js +58 -0
- package/dist/components/auth/flow/ConsentDetailText.js.map +1 -0
- package/dist/components/auth/flow/ConsentDetailText.styles.d.ts +20 -0
- package/dist/components/auth/flow/ConsentDetailText.styles.d.ts.map +1 -0
- package/dist/components/auth/flow/ConsentDetailText.styles.js +80 -0
- package/dist/components/auth/flow/ConsentDetailText.styles.js.map +1 -0
- package/dist/components/auth/flow/FieldFactory.js +1 -1
- package/dist/components/auth/flow/resolveConsentText.d.ts +13 -0
- package/dist/components/auth/flow/resolveConsentText.d.ts.map +1 -0
- package/dist/components/auth/flow/resolveConsentText.js +23 -0
- package/dist/components/auth/flow/resolveConsentText.js.map +1 -0
- package/dist/components/primitives/KeyValueInput/KeyValueInput.js +1 -1
- package/dist/components/primitives/MultiInput/MultiInput.js +1 -1
- package/dist/components/primitives/PasswordField/PasswordField.js +1 -1
- package/dist/hooks/auth/useConsentDetailField.d.ts +130 -0
- package/dist/hooks/auth/useConsentDetailField.d.ts.map +1 -0
- package/dist/hooks/auth/useConsentDetailField.js +354 -0
- package/dist/hooks/auth/useConsentDetailField.js.map +1 -0
- package/dist/hooks/management/useAccountLifecycle.d.ts +49 -0
- package/dist/hooks/management/useAccountLifecycle.d.ts.map +1 -0
- package/dist/hooks/management/useAccountLifecycle.js +56 -0
- package/dist/hooks/management/useAccountLifecycle.js.map +1 -0
- package/dist/hooks/management/useManagementEndpoint.d.ts +5 -1
- package/dist/hooks/management/useManagementEndpoint.d.ts.map +1 -1
- package/dist/hooks/management/useManagementEndpoint.js.map +1 -1
- package/dist/hooks/management/useManagementRequestConfig.d.ts +22 -0
- package/dist/hooks/management/useManagementRequestConfig.d.ts.map +1 -0
- package/dist/hooks/management/useManagementRequestConfig.js +39 -0
- package/dist/hooks/management/useManagementRequestConfig.js.map +1 -0
- package/dist/index.d.ts +35 -56
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -42
- package/dist/models/config.d.ts +3 -4
- package/dist/models/config.d.ts.map +1 -1
- package/dist/utils/formatConsentDetailValue.d.ts +16 -0
- package/dist/utils/formatConsentDetailValue.d.ts.map +1 -0
- package/dist/utils/formatConsentDetailValue.js +25 -0
- package/dist/utils/formatConsentDetailValue.js.map +1 -0
- package/dist/utils/getConsentDetailLayout.d.ts +32 -0
- package/dist/utils/getConsentDetailLayout.d.ts.map +1 -0
- package/dist/utils/getConsentDetailLayout.js +43 -0
- package/dist/utils/getConsentDetailLayout.js.map +1 -0
- package/dist/utils/getConsentDetailListDisplay.d.ts +30 -0
- package/dist/utils/getConsentDetailListDisplay.d.ts.map +1 -0
- package/dist/utils/getConsentDetailListDisplay.js +30 -0
- package/dist/utils/getConsentDetailListDisplay.js.map +1 -0
- package/dist/utils/isConsentApprovalBlocked.d.ts +17 -0
- package/dist/utils/isConsentApprovalBlocked.d.ts.map +1 -0
- package/dist/utils/isConsentApprovalBlocked.js +39 -0
- package/dist/utils/isConsentApprovalBlocked.js.map +1 -0
- package/dist/utils/isConsentDetailPlainList.d.ts +15 -0
- package/dist/utils/isConsentDetailPlainList.d.ts.map +1 -0
- package/dist/utils/isConsentDetailPlainList.js +23 -0
- package/dist/utils/isConsentDetailPlainList.js.map +1 -0
- package/dist/utils/isConsentDetailStructured.d.ts +10 -0
- package/dist/utils/isConsentDetailStructured.d.ts.map +1 -0
- package/dist/utils/isConsentDetailStructured.js +14 -0
- package/dist/utils/isConsentDetailStructured.js.map +1 -0
- package/dist/utils/isConsentDetailTextClamped.d.ts +20 -0
- package/dist/utils/isConsentDetailTextClamped.d.ts.map +1 -0
- package/dist/utils/isConsentDetailTextClamped.js +24 -0
- package/dist/utils/isConsentDetailTextClamped.js.map +1 -0
- package/package.json +2 -2
- package/dist/cjs/hooks/management/agents/useCreateAgent.cjs +0 -26
- package/dist/cjs/hooks/management/agents/useCreateAgent.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs +0 -26
- package/dist/cjs/hooks/management/agents/useDeleteAgent.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useGetAgent.cjs +0 -30
- package/dist/cjs/hooks/management/agents/useGetAgent.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs +0 -41
- package/dist/cjs/hooks/management/agents/useGetAgentGroups.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs +0 -42
- package/dist/cjs/hooks/management/agents/useGetAgentRoles.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs +0 -31
- package/dist/cjs/hooks/management/agents/useGetAgentTypes.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useGetAgents.cjs +0 -33
- package/dist/cjs/hooks/management/agents/useGetAgents.cjs.map +0 -1
- package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs +0 -27
- package/dist/cjs/hooks/management/agents/useUpdateAgent.cjs.map +0 -1
- package/dist/cjs/hooks/management/applications/useCreateApplication.cjs +0 -31
- package/dist/cjs/hooks/management/applications/useCreateApplication.cjs.map +0 -1
- package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs +0 -26
- package/dist/cjs/hooks/management/applications/useDeleteApplication.cjs.map +0 -1
- package/dist/cjs/hooks/management/applications/useGetApplication.cjs +0 -35
- package/dist/cjs/hooks/management/applications/useGetApplication.cjs.map +0 -1
- package/dist/cjs/hooks/management/applications/useGetApplications.cjs +0 -36
- package/dist/cjs/hooks/management/applications/useGetApplications.cjs.map +0 -1
- package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs +0 -27
- package/dist/cjs/hooks/management/applications/useUpdateApplication.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs +0 -32
- package/dist/cjs/hooks/management/groups/useAddGroupMembers.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useCreateGroup.cjs +0 -26
- package/dist/cjs/hooks/management/groups/useCreateGroup.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs +0 -30
- package/dist/cjs/hooks/management/groups/useDeleteGroup.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useGetGroup.cjs +0 -30
- package/dist/cjs/hooks/management/groups/useGetGroup.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs +0 -40
- package/dist/cjs/hooks/management/groups/useGetGroupMembers.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useGetGroups.cjs +0 -31
- package/dist/cjs/hooks/management/groups/useGetGroups.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs +0 -32
- package/dist/cjs/hooks/management/groups/useRemoveGroupMembers.cjs.map +0 -1
- package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs +0 -31
- package/dist/cjs/hooks/management/groups/useUpdateGroup.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs +0 -27
- package/dist/cjs/hooks/management/roles/useAddRoleAssignments.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useCreateRole.cjs +0 -26
- package/dist/cjs/hooks/management/roles/useCreateRole.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useDeleteRole.cjs +0 -26
- package/dist/cjs/hooks/management/roles/useDeleteRole.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useGetRole.cjs +0 -30
- package/dist/cjs/hooks/management/roles/useGetRole.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs +0 -42
- package/dist/cjs/hooks/management/roles/useGetRoleAssignments.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useGetRoles.cjs +0 -31
- package/dist/cjs/hooks/management/roles/useGetRoles.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs +0 -27
- package/dist/cjs/hooks/management/roles/useRemoveRoleAssignments.cjs.map +0 -1
- package/dist/cjs/hooks/management/roles/useUpdateRole.cjs +0 -27
- package/dist/cjs/hooks/management/roles/useUpdateRole.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useCreateUser.cjs +0 -26
- package/dist/cjs/hooks/management/users/useCreateUser.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useDeleteUser.cjs +0 -26
- package/dist/cjs/hooks/management/users/useDeleteUser.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useGetUser.cjs +0 -30
- package/dist/cjs/hooks/management/users/useGetUser.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useGetUserGroups.cjs +0 -41
- package/dist/cjs/hooks/management/users/useGetUserGroups.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useGetUserTypes.cjs +0 -31
- package/dist/cjs/hooks/management/users/useGetUserTypes.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useGetUsers.cjs +0 -38
- package/dist/cjs/hooks/management/users/useGetUsers.cjs.map +0 -1
- package/dist/cjs/hooks/management/users/useUpdateUser.cjs +0 -27
- package/dist/cjs/hooks/management/users/useUpdateUser.cjs.map +0 -1
- package/dist/hooks/management/agents/useCreateAgent.d.ts +0 -11
- package/dist/hooks/management/agents/useCreateAgent.d.ts.map +0 -1
- package/dist/hooks/management/agents/useCreateAgent.js +0 -24
- package/dist/hooks/management/agents/useCreateAgent.js.map +0 -1
- package/dist/hooks/management/agents/useDeleteAgent.d.ts +0 -10
- package/dist/hooks/management/agents/useDeleteAgent.d.ts.map +0 -1
- package/dist/hooks/management/agents/useDeleteAgent.js +0 -24
- package/dist/hooks/management/agents/useDeleteAgent.js.map +0 -1
- package/dist/hooks/management/agents/useGetAgent.d.ts +0 -12
- package/dist/hooks/management/agents/useGetAgent.d.ts.map +0 -1
- package/dist/hooks/management/agents/useGetAgent.js +0 -28
- package/dist/hooks/management/agents/useGetAgent.js.map +0 -1
- package/dist/hooks/management/agents/useGetAgentGroups.d.ts +0 -16
- package/dist/hooks/management/agents/useGetAgentGroups.d.ts.map +0 -1
- package/dist/hooks/management/agents/useGetAgentGroups.js +0 -39
- package/dist/hooks/management/agents/useGetAgentGroups.js.map +0 -1
- package/dist/hooks/management/agents/useGetAgentRoles.d.ts +0 -17
- package/dist/hooks/management/agents/useGetAgentRoles.d.ts.map +0 -1
- package/dist/hooks/management/agents/useGetAgentRoles.js +0 -40
- package/dist/hooks/management/agents/useGetAgentRoles.js.map +0 -1
- package/dist/hooks/management/agents/useGetAgentTypes.d.ts +0 -15
- package/dist/hooks/management/agents/useGetAgentTypes.d.ts.map +0 -1
- package/dist/hooks/management/agents/useGetAgentTypes.js +0 -29
- package/dist/hooks/management/agents/useGetAgentTypes.js.map +0 -1
- package/dist/hooks/management/agents/useGetAgents.d.ts +0 -23
- package/dist/hooks/management/agents/useGetAgents.d.ts.map +0 -1
- package/dist/hooks/management/agents/useGetAgents.js +0 -31
- package/dist/hooks/management/agents/useGetAgents.js.map +0 -1
- package/dist/hooks/management/agents/useUpdateAgent.d.ts +0 -18
- package/dist/hooks/management/agents/useUpdateAgent.d.ts.map +0 -1
- package/dist/hooks/management/agents/useUpdateAgent.js +0 -25
- package/dist/hooks/management/agents/useUpdateAgent.js.map +0 -1
- package/dist/hooks/management/applications/useCreateApplication.d.ts +0 -16
- package/dist/hooks/management/applications/useCreateApplication.d.ts.map +0 -1
- package/dist/hooks/management/applications/useCreateApplication.js +0 -29
- package/dist/hooks/management/applications/useCreateApplication.js.map +0 -1
- package/dist/hooks/management/applications/useDeleteApplication.d.ts +0 -10
- package/dist/hooks/management/applications/useDeleteApplication.d.ts.map +0 -1
- package/dist/hooks/management/applications/useDeleteApplication.js +0 -24
- package/dist/hooks/management/applications/useDeleteApplication.js.map +0 -1
- package/dist/hooks/management/applications/useGetApplication.d.ts +0 -17
- package/dist/hooks/management/applications/useGetApplication.d.ts.map +0 -1
- package/dist/hooks/management/applications/useGetApplication.js +0 -33
- package/dist/hooks/management/applications/useGetApplication.js.map +0 -1
- package/dist/hooks/management/applications/useGetApplications.d.ts +0 -24
- package/dist/hooks/management/applications/useGetApplications.d.ts.map +0 -1
- package/dist/hooks/management/applications/useGetApplications.js +0 -34
- package/dist/hooks/management/applications/useGetApplications.js.map +0 -1
- package/dist/hooks/management/applications/useUpdateApplication.d.ts +0 -18
- package/dist/hooks/management/applications/useUpdateApplication.d.ts.map +0 -1
- package/dist/hooks/management/applications/useUpdateApplication.js +0 -25
- package/dist/hooks/management/applications/useUpdateApplication.js.map +0 -1
- package/dist/hooks/management/groups/useAddGroupMembers.d.ts +0 -24
- package/dist/hooks/management/groups/useAddGroupMembers.d.ts.map +0 -1
- package/dist/hooks/management/groups/useAddGroupMembers.js +0 -30
- package/dist/hooks/management/groups/useAddGroupMembers.js.map +0 -1
- package/dist/hooks/management/groups/useCreateGroup.d.ts +0 -11
- package/dist/hooks/management/groups/useCreateGroup.d.ts.map +0 -1
- package/dist/hooks/management/groups/useCreateGroup.js +0 -24
- package/dist/hooks/management/groups/useCreateGroup.js.map +0 -1
- package/dist/hooks/management/groups/useDeleteGroup.d.ts +0 -10
- package/dist/hooks/management/groups/useDeleteGroup.d.ts.map +0 -1
- package/dist/hooks/management/groups/useDeleteGroup.js +0 -28
- package/dist/hooks/management/groups/useDeleteGroup.js.map +0 -1
- package/dist/hooks/management/groups/useGetGroup.d.ts +0 -12
- package/dist/hooks/management/groups/useGetGroup.d.ts.map +0 -1
- package/dist/hooks/management/groups/useGetGroup.js +0 -28
- package/dist/hooks/management/groups/useGetGroup.js.map +0 -1
- package/dist/hooks/management/groups/useGetGroupMembers.d.ts +0 -20
- package/dist/hooks/management/groups/useGetGroupMembers.d.ts.map +0 -1
- package/dist/hooks/management/groups/useGetGroupMembers.js +0 -38
- package/dist/hooks/management/groups/useGetGroupMembers.js.map +0 -1
- package/dist/hooks/management/groups/useGetGroups.d.ts +0 -19
- package/dist/hooks/management/groups/useGetGroups.d.ts.map +0 -1
- package/dist/hooks/management/groups/useGetGroups.js +0 -29
- package/dist/hooks/management/groups/useGetGroups.js.map +0 -1
- package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts +0 -12
- package/dist/hooks/management/groups/useRemoveGroupMembers.d.ts.map +0 -1
- package/dist/hooks/management/groups/useRemoveGroupMembers.js +0 -30
- package/dist/hooks/management/groups/useRemoveGroupMembers.js.map +0 -1
- package/dist/hooks/management/groups/useUpdateGroup.d.ts +0 -24
- package/dist/hooks/management/groups/useUpdateGroup.d.ts.map +0 -1
- package/dist/hooks/management/groups/useUpdateGroup.js +0 -29
- package/dist/hooks/management/groups/useUpdateGroup.js.map +0 -1
- package/dist/hooks/management/roles/useAddRoleAssignments.d.ts +0 -24
- package/dist/hooks/management/roles/useAddRoleAssignments.d.ts.map +0 -1
- package/dist/hooks/management/roles/useAddRoleAssignments.js +0 -25
- package/dist/hooks/management/roles/useAddRoleAssignments.js.map +0 -1
- package/dist/hooks/management/roles/useCreateRole.d.ts +0 -11
- package/dist/hooks/management/roles/useCreateRole.d.ts.map +0 -1
- package/dist/hooks/management/roles/useCreateRole.js +0 -24
- package/dist/hooks/management/roles/useCreateRole.js.map +0 -1
- package/dist/hooks/management/roles/useDeleteRole.d.ts +0 -10
- package/dist/hooks/management/roles/useDeleteRole.d.ts.map +0 -1
- package/dist/hooks/management/roles/useDeleteRole.js +0 -24
- package/dist/hooks/management/roles/useDeleteRole.js.map +0 -1
- package/dist/hooks/management/roles/useGetRole.d.ts +0 -12
- package/dist/hooks/management/roles/useGetRole.d.ts.map +0 -1
- package/dist/hooks/management/roles/useGetRole.js +0 -28
- package/dist/hooks/management/roles/useGetRole.js.map +0 -1
- package/dist/hooks/management/roles/useGetRoleAssignments.d.ts +0 -24
- package/dist/hooks/management/roles/useGetRoleAssignments.d.ts.map +0 -1
- package/dist/hooks/management/roles/useGetRoleAssignments.js +0 -40
- package/dist/hooks/management/roles/useGetRoleAssignments.js.map +0 -1
- package/dist/hooks/management/roles/useGetRoles.d.ts +0 -19
- package/dist/hooks/management/roles/useGetRoles.d.ts.map +0 -1
- package/dist/hooks/management/roles/useGetRoles.js +0 -29
- package/dist/hooks/management/roles/useGetRoles.js.map +0 -1
- package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts +0 -11
- package/dist/hooks/management/roles/useRemoveRoleAssignments.d.ts.map +0 -1
- package/dist/hooks/management/roles/useRemoveRoleAssignments.js +0 -25
- package/dist/hooks/management/roles/useRemoveRoleAssignments.js.map +0 -1
- package/dist/hooks/management/roles/useUpdateRole.d.ts +0 -24
- package/dist/hooks/management/roles/useUpdateRole.d.ts.map +0 -1
- package/dist/hooks/management/roles/useUpdateRole.js +0 -25
- package/dist/hooks/management/roles/useUpdateRole.js.map +0 -1
- package/dist/hooks/management/users/useCreateUser.d.ts +0 -11
- package/dist/hooks/management/users/useCreateUser.d.ts.map +0 -1
- package/dist/hooks/management/users/useCreateUser.js +0 -24
- package/dist/hooks/management/users/useCreateUser.js.map +0 -1
- package/dist/hooks/management/users/useDeleteUser.d.ts +0 -10
- package/dist/hooks/management/users/useDeleteUser.d.ts.map +0 -1
- package/dist/hooks/management/users/useDeleteUser.js +0 -24
- package/dist/hooks/management/users/useDeleteUser.js.map +0 -1
- package/dist/hooks/management/users/useGetUser.d.ts +0 -12
- package/dist/hooks/management/users/useGetUser.d.ts.map +0 -1
- package/dist/hooks/management/users/useGetUser.js +0 -28
- package/dist/hooks/management/users/useGetUser.js.map +0 -1
- package/dist/hooks/management/users/useGetUserGroups.d.ts +0 -16
- package/dist/hooks/management/users/useGetUserGroups.d.ts.map +0 -1
- package/dist/hooks/management/users/useGetUserGroups.js +0 -39
- package/dist/hooks/management/users/useGetUserGroups.js.map +0 -1
- package/dist/hooks/management/users/useGetUserTypes.d.ts +0 -15
- package/dist/hooks/management/users/useGetUserTypes.d.ts.map +0 -1
- package/dist/hooks/management/users/useGetUserTypes.js +0 -29
- package/dist/hooks/management/users/useGetUserTypes.js.map +0 -1
- package/dist/hooks/management/users/useGetUsers.d.ts +0 -17
- package/dist/hooks/management/users/useGetUsers.d.ts.map +0 -1
- package/dist/hooks/management/users/useGetUsers.js +0 -36
- package/dist/hooks/management/users/useGetUsers.js.map +0 -1
- package/dist/hooks/management/users/useUpdateUser.d.ts +0 -18
- package/dist/hooks/management/users/useUpdateUser.d.ts.map +0 -1
- package/dist/hooks/management/users/useUpdateUser.js +0 -25
- package/dist/hooks/management/users/useUpdateUser.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationDetails.js","names":["ApplicationDetails: FC<ApplicationDetailsProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","application: ResourceQueryResult<Application>","useResourceQuery","deletion: ResourceMutationResult<void, string>","useResourceMutation","update: ResourceMutationResult<Application, UpdateApplicationVariables>","regeneration: ResourceMutationResult<RegenerateClientSecretResult, string>","lifecycle: AccountLifecycleState","useAccountLifecycle","BaseApplicationDetails"],"sources":["../../../../src/components/admin/ApplicationDetails/ApplicationDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n AdministrationMode,\n Application,\n ApplicationQueryKeys,\n deleteApplication,\n getApplication,\n regenerateClientSecret,\n RegenerateClientSecretResult,\n toManagementErrorMessage,\n toUpdateApplicationRequest,\n updateApplication,\n} from '@thunderid/browser';\nimport {FC, ReactElement} from 'react';\nimport BaseApplicationDetails, {\n ApplicationUpdateSubmission,\n BaseApplicationDetailsProps,\n} from './BaseApplicationDetails';\nimport useAccountLifecycle, {AccountLifecycleState} from '../../../hooks/management/useAccountLifecycle';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationResult} from '../../../hooks/management/useResourceMutation';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\n\ninterface UpdateApplicationVariables {\n application: Application;\n changes: ApplicationUpdateSubmission;\n}\n\nexport type ApplicationDetailsProps = Omit<\n BaseApplicationDetailsProps,\n | 'application'\n | 'clientSecret'\n | 'error'\n | 'isDeleting'\n | 'isLoading'\n | 'isRegeneratingSecret'\n | 'isRunningLifecycleAction'\n | 'isUpdating'\n | 'lifecycleActions'\n | 'onDelete'\n | 'onLifecycleAction'\n | 'onRegenerateSecret'\n | 'onSecretDismiss'\n | 'onUpdate'\n> & {\n /**\n * How the delete and the client secret regeneration run. `flow` runs the administration flow the server configures for it, which can revoke\n * grants and end sessions first. It needs `baseUrl`.\n * @default 'native'\n */\n administrationMode?: AdministrationMode;\n applicationId: string;\n /**\n * Whether the application can be deleted from this view.\n * @default false\n */\n deletable?: boolean;\n /**\n * Whether the application's general fields, redirect URIs and grant types can be edited from this view.\n * @default false\n */\n editable?: boolean;\n /**\n * Whether the application can be suspended and unsuspended from this view. Each action runs through its\n * administration flow and is offered only when the server configures that flow. Reading the configured\n * flows needs a token that may read the server configuration.\n * @default false\n */\n lifecycleActions?: boolean;\n /**\n * Called after the application has been deleted.\n */\n onDeleted?: () => void;\n /**\n * Whether the application's client secret can be regenerated from this view. The new secret is shown\n * once.\n * @default false\n */\n secretRegenerable?: boolean;\n};\n\n/**\n * Shows an application and its OAuth configuration, and optionally lets the signed-in user edit it,\n * regenerate its client secret or delete it.\n *\n * The server guards applications with the root `system` permission, for reading and for changes alike;\n * it defines no application-specific permission. Gate the view and its actions on it with\n * `useGrantedPermissions().can('system')`.\n *\n * @example\n * ```tsx\n * const {can} = useGrantedPermissions();\n * const isAdmin = can('system');\n *\n * <ApplicationDetails\n * applicationId={applicationId}\n * editable={isAdmin}\n * deletable={isAdmin}\n * secretRegenerable={isAdmin}\n * onDeleted={() => navigate('/applications')}\n * />\n * ```\n */\nconst ApplicationDetails: FC<ApplicationDetailsProps> = ({\n administrationMode,\n applicationId,\n deletable = false,\n editable = false,\n lifecycleActions = false,\n onDeleted,\n preferences,\n secretRegenerable = false,\n ...rest\n}: ApplicationDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const endpoint: ManagementEndpoint = useManagementEndpoint('applications');\n const application: ResourceQueryResult<Application> = useResourceQuery(\n [ApplicationQueryKeys.APPLICATION, applicationId],\n (fetcher) => getApplication({...endpoint, applicationId, fetcher}),\n {enabled: Boolean(applicationId)},\n );\n const deletion: ResourceMutationResult<void, string> = useResourceMutation(\n (id: string, fetcher) => deleteApplication({...endpoint, administrationMode, applicationId: id, fetcher}),\n () => [[ApplicationQueryKeys.APPLICATIONS]],\n {onSuccess: onDeleted},\n );\n const update: ResourceMutationResult<Application, UpdateApplicationVariables> = useResourceMutation(\n ({application: current, changes}: UpdateApplicationVariables, fetcher) =>\n updateApplication({\n ...endpoint,\n applicationId: current.id,\n fetcher,\n payload: toUpdateApplicationRequest(current, changes),\n }),\n ({application: current}: UpdateApplicationVariables) => [\n [ApplicationQueryKeys.APPLICATION, current.id],\n [ApplicationQueryKeys.APPLICATIONS],\n ],\n );\n const regeneration: ResourceMutationResult<RegenerateClientSecretResult, string> = useResourceMutation(\n (id: string, fetcher) => regenerateClientSecret({...endpoint, administrationMode, applicationId: id, fetcher}),\n (id: string) => [[ApplicationQueryKeys.APPLICATION, id], [ApplicationQueryKeys.APPLICATIONS]],\n );\n\n const lifecycle: AccountLifecycleState = useAccountLifecycle({\n enabled: lifecycleActions,\n invalidatedKeys: [[ApplicationQueryKeys.APPLICATION, applicationId], [ApplicationQueryKeys.APPLICATIONS]],\n kind: 'application',\n status: application.data?.status?.value,\n subject: applicationId,\n });\n\n return (\n <BaseApplicationDetails\n application={application.data}\n isLoading={application.isLoading}\n error={\n toManagementErrorMessage(t, application.error, 'admin.applications.details.error') ??\n toManagementErrorMessage(t, deletion.error, 'admin.applications.details.delete.error') ??\n toManagementErrorMessage(t, update.error, 'admin.applications.details.edit.error') ??\n toManagementErrorMessage(t, regeneration.error, 'admin.applications.details.secret.error') ??\n toManagementErrorMessage(t, lifecycle.error, 'admin.common.lifecycle.error') ??\n toManagementErrorMessage(t, lifecycle.loadError, 'admin.common.lifecycle.load_error')\n }\n isDeleting={deletion.isLoading}\n onDelete={deletable ? (): void => void deletion.mutate(applicationId) : undefined}\n lifecycleActions={lifecycle.actions}\n isRunningLifecycleAction={lifecycle.isRunning}\n onLifecycleAction={lifecycleActions ? lifecycle.run : undefined}\n isUpdating={update.isLoading}\n onUpdate={\n editable && application.data\n ? (changes: ApplicationUpdateSubmission): void =>\n void update.mutate({application: application.data!, changes})\n : undefined\n }\n isRegeneratingSecret={regeneration.isLoading}\n onRegenerateSecret={secretRegenerable ? (): void => void regeneration.mutate(applicationId) : undefined}\n clientSecret={regeneration.data?.clientSecret ?? null}\n onSecretDismiss={regeneration.reset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default ApplicationDetails;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GA,MAAMA,sBAAmD,EACvD,oBACA,eACA,YAAY,OACZ,WAAW,OACX,mBAAmB,OACnB,WACA,aACA,oBAAoB,MACpB,GAAG,WACwC;CAC3C,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAMC,WAA+BC,8BAAsB,eAAe;CAC1E,MAAMC,cAAgDC,yBACpD,CAAC,qBAAqB,aAAa,cAAc,GAChD,YAAY,eAAe;EAAC,GAAG;EAAU;EAAe;EAAQ,CAAC,EAClE,EAAC,SAAS,QAAQ,cAAc,EAAC,CAClC;CACD,MAAMC,WAAiDC,6BACpD,IAAY,YAAY,kBAAkB;EAAC,GAAG;EAAU;EAAoB,eAAe;EAAI;EAAQ,CAAC,QACnG,CAAC,CAAC,qBAAqB,aAAa,CAAC,EAC3C,EAAC,WAAW,WAAU,CACvB;CACD,MAAMC,SAA0ED,6BAC7E,EAAC,aAAa,SAAS,WAAsC,YAC5D,kBAAkB;EAChB,GAAG;EACH,eAAe,QAAQ;EACvB;EACA,SAAS,2BAA2B,SAAS,QAAQ;EACtD,CAAC,GACH,EAAC,aAAa,cAAyC,CACtD,CAAC,qBAAqB,aAAa,QAAQ,GAAG,EAC9C,CAAC,qBAAqB,aAAa,CACpC,CACF;CACD,MAAME,eAA6EF,6BAChF,IAAY,YAAY,uBAAuB;EAAC,GAAG;EAAU;EAAoB,eAAe;EAAI;EAAQ,CAAC,GAC7G,OAAe,CAAC,CAAC,qBAAqB,aAAa,GAAG,EAAE,CAAC,qBAAqB,aAAa,CAAC,CAC9F;CAED,MAAMG,YAAmCC,4BAAoB;EAC3D,SAAS;EACT,iBAAiB,CAAC,CAAC,qBAAqB,aAAa,cAAc,EAAE,CAAC,qBAAqB,aAAa,CAAC;EACzG,MAAM;EACN,QAAQ,YAAY,MAAM,QAAQ;EAClC,SAAS;EACV,CAAC;AAEF,QACE,oBAACC;EACC,aAAa,YAAY;EACzB,WAAW,YAAY;EACvB,OACE,yBAAyB,GAAG,YAAY,OAAO,mCAAmC,IAClF,yBAAyB,GAAG,SAAS,OAAO,0CAA0C,IACtF,yBAAyB,GAAG,OAAO,OAAO,wCAAwC,IAClF,yBAAyB,GAAG,aAAa,OAAO,0CAA0C,IAC1F,yBAAyB,GAAG,UAAU,OAAO,+BAA+B,IAC5E,yBAAyB,GAAG,UAAU,WAAW,oCAAoC;EAEvF,YAAY,SAAS;EACrB,UAAU,kBAAwB,KAAK,SAAS,OAAO,cAAc,GAAG;EACxE,kBAAkB,UAAU;EAC5B,0BAA0B,UAAU;EACpC,mBAAmB,mBAAmB,UAAU,MAAM;EACtD,YAAY,OAAO;EACnB,UACE,YAAY,YAAY,QACnB,YACC,KAAK,OAAO,OAAO;GAAC,aAAa,YAAY;GAAO;GAAQ,CAAC,GAC/D;EAEN,sBAAsB,aAAa;EACnC,oBAAoB,0BAAgC,KAAK,aAAa,OAAO,cAAc,GAAG;EAC9F,cAAc,aAAa,MAAM,gBAAgB;EACjD,iBAAiB,aAAa;EACjB;EACb,GAAI;GACJ;;AAIN,iCAAe"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { AccountLifecycleAction, Application, ApplicationSubmission, OAuth2Config, Preferences } from '@thunderid/browser';
|
|
2
|
+
import { FC, ReactNode } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* The edited fields {@link BaseApplicationDetails} hands `onUpdate`. Whether the client is public does
|
|
5
|
+
* not change.
|
|
6
|
+
*/
|
|
7
|
+
export type ApplicationUpdateSubmission = Omit<ApplicationSubmission, 'publicClient'>;
|
|
8
|
+
/**
|
|
9
|
+
* What {@link BaseApplicationDetails} hands its `children` render function, so the application can be
|
|
10
|
+
* shown with any UI.
|
|
11
|
+
*/
|
|
12
|
+
export interface BaseApplicationDetailsRenderProps {
|
|
13
|
+
application?: Application;
|
|
14
|
+
/**
|
|
15
|
+
* The new client secret, to show once. `null` while there is none.
|
|
16
|
+
*/
|
|
17
|
+
clientSecret: string | null;
|
|
18
|
+
error: string | null;
|
|
19
|
+
isDeleting: boolean;
|
|
20
|
+
isLoading: boolean;
|
|
21
|
+
isRegeneratingSecret: boolean;
|
|
22
|
+
isRunningLifecycleAction: boolean;
|
|
23
|
+
isUpdating: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* The account lifecycle actions offered for the application. Empty when none is allowed.
|
|
26
|
+
*/
|
|
27
|
+
lifecycleActions: AccountLifecycleAction[];
|
|
28
|
+
/**
|
|
29
|
+
* The application's OAuth configuration, without its client secret. Undefined when it has no OAuth client.
|
|
30
|
+
*/
|
|
31
|
+
oauth?: Omit<OAuth2Config, 'clientSecret'>;
|
|
32
|
+
/**
|
|
33
|
+
* Deletes the application. Undefined when deletion is not allowed, including for read-only applications.
|
|
34
|
+
*/
|
|
35
|
+
onDelete?: () => void;
|
|
36
|
+
/**
|
|
37
|
+
* Runs an account lifecycle action. Undefined when none is allowed.
|
|
38
|
+
*/
|
|
39
|
+
onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Gives the application a new client secret. Undefined when not allowed, for read-only applications
|
|
42
|
+
* and for applications without a confidential OAuth client.
|
|
43
|
+
*/
|
|
44
|
+
onRegenerateSecret?: () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Hides the new client secret once it has been copied. Undefined while there is no secret.
|
|
47
|
+
*/
|
|
48
|
+
onSecretDismiss?: () => void;
|
|
49
|
+
/**
|
|
50
|
+
* Saves edited fields. Undefined when editing is not allowed, including for read-only applications.
|
|
51
|
+
*/
|
|
52
|
+
onUpdate?: (application: ApplicationUpdateSubmission) => void;
|
|
53
|
+
}
|
|
54
|
+
export interface BaseApplicationDetailsProps {
|
|
55
|
+
/**
|
|
56
|
+
* Controls rendered next to the application's name.
|
|
57
|
+
*/
|
|
58
|
+
actions?: ReactNode;
|
|
59
|
+
application?: Application;
|
|
60
|
+
/**
|
|
61
|
+
* Renders custom UI in place of the default view. Receives the application, its OAuth configuration,
|
|
62
|
+
* the loading and error state, the actions the app allows and the new client secret to show.
|
|
63
|
+
*/
|
|
64
|
+
children?: (props: BaseApplicationDetailsRenderProps) => ReactNode;
|
|
65
|
+
className?: string;
|
|
66
|
+
/**
|
|
67
|
+
* A client secret just generated by `onRegenerateSecret`, shown once until `onSecretDismiss` clears it.
|
|
68
|
+
*/
|
|
69
|
+
clientSecret?: string | null;
|
|
70
|
+
error?: string | null;
|
|
71
|
+
isDeleting?: boolean;
|
|
72
|
+
isLoading?: boolean;
|
|
73
|
+
isRegeneratingSecret?: boolean;
|
|
74
|
+
isRunningLifecycleAction?: boolean;
|
|
75
|
+
isUpdating?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* The account lifecycle actions to offer (suspend, unsuspend; applications are never locked), shown only with `onLifecycleAction`. They change
|
|
78
|
+
* only runtime state, so they apply to read-only applications too.
|
|
79
|
+
*/
|
|
80
|
+
lifecycleActions?: AccountLifecycleAction[];
|
|
81
|
+
/**
|
|
82
|
+
* Deletes the application. The delete action is hidden when omitted.
|
|
83
|
+
*/
|
|
84
|
+
onDelete?: () => void;
|
|
85
|
+
/**
|
|
86
|
+
* Runs an account lifecycle action. Suspending and unsuspending ask for confirmation first.
|
|
87
|
+
*/
|
|
88
|
+
onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;
|
|
89
|
+
/**
|
|
90
|
+
* Gives the application a new client secret. The regenerate action is hidden when omitted, and for
|
|
91
|
+
* public clients, which have no secret.
|
|
92
|
+
*/
|
|
93
|
+
onRegenerateSecret?: () => void;
|
|
94
|
+
/**
|
|
95
|
+
* Called when the user has copied the new client secret.
|
|
96
|
+
*/
|
|
97
|
+
onSecretDismiss?: () => void;
|
|
98
|
+
/**
|
|
99
|
+
* Saves the edited general fields, redirect URIs and grant types. Editing is offered only when set.
|
|
100
|
+
*/
|
|
101
|
+
onUpdate?: (application: ApplicationUpdateSubmission) => void;
|
|
102
|
+
preferences?: Preferences;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Shows an application's general fields and OAuth configuration. Holds no data of its own: pass the
|
|
106
|
+
* application and handle editing, deletion and client secret regeneration, each offered only when its
|
|
107
|
+
* handler is set.
|
|
108
|
+
*/
|
|
109
|
+
declare const BaseApplicationDetails: FC<BaseApplicationDetailsProps>;
|
|
110
|
+
export default BaseApplicationDetails;
|
|
111
|
+
//# sourceMappingURL=BaseApplicationDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseApplicationDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationDetails/BaseApplicationDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EACtB,WAAW,EAEX,qBAAqB,EAGrB,YAAY,EAEZ,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,EAAE,EAA2B,SAAS,EAAW,MAAM,OAAO,CAAC;AAavE;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,wBAAwB,EAAE,OAAO,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;IAC3C;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iCAAiC,KAAK,SAAS,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC5C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAsBD;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAgQ3D,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import useTranslation_default from "../../../hooks/useTranslation.js";
|
|
2
|
+
import Spinner_default from "../../primitives/Spinner/Spinner.js";
|
|
3
|
+
import Button_default from "../../primitives/Button/Button.js";
|
|
4
|
+
import Alert_default from "../../primitives/Alert/Alert.js";
|
|
5
|
+
import CopyableText_default from "../../primitives/CopyableText/CopyableText.js";
|
|
6
|
+
import useAdminPartStyles_default from "../shared/useAdminPartStyles.js";
|
|
7
|
+
import AdminSection_default from "../shared/AdminSection.js";
|
|
8
|
+
import { AccessStatusBadge, AccountLifecycleButtons } from "../shared/AccountLifecycleParts.js";
|
|
9
|
+
import { ChipList, ConfirmButton, DetailList, Panel } from "../shared/AdminParts.js";
|
|
10
|
+
import ApplicationFormFields_default from "../shared/ApplicationFormFields.js";
|
|
11
|
+
import ClientSecretNotice_default from "../shared/ClientSecretNotice.js";
|
|
12
|
+
import { APPLICATION_GRANT_TYPES, getApplicationOAuthConfig, isApplicationSubmissionValid, parseRedirectUris } from "@thunderid/browser";
|
|
13
|
+
import { useState } from "react";
|
|
14
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
|
|
16
|
+
//#region src/components/admin/ApplicationDetails/BaseApplicationDetails.tsx
|
|
17
|
+
const toFormValues = (application, oauth) => ({
|
|
18
|
+
description: application.description ?? "",
|
|
19
|
+
grantTypes: oauth?.grantTypes ?? [],
|
|
20
|
+
logoUrl: application.logoUrl ?? "",
|
|
21
|
+
name: application.name,
|
|
22
|
+
publicClient: Boolean(oauth?.publicClient),
|
|
23
|
+
redirectUris: (oauth?.redirectUris ?? []).join(", "),
|
|
24
|
+
url: application.url ?? ""
|
|
25
|
+
});
|
|
26
|
+
const toSubmission = (values) => ({
|
|
27
|
+
description: values.description.trim() || void 0,
|
|
28
|
+
grantTypes: values.grantTypes,
|
|
29
|
+
logoUrl: values.logoUrl.trim() || void 0,
|
|
30
|
+
name: values.name.trim(),
|
|
31
|
+
publicClient: values.publicClient,
|
|
32
|
+
redirectUris: parseRedirectUris(values.redirectUris),
|
|
33
|
+
url: values.url.trim() || void 0
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Shows an application's general fields and OAuth configuration. Holds no data of its own: pass the
|
|
37
|
+
* application and handle editing, deletion and client secret regeneration, each offered only when its
|
|
38
|
+
* handler is set.
|
|
39
|
+
*/
|
|
40
|
+
const BaseApplicationDetails = ({ actions, application, children, className, clientSecret = null, error = null, isDeleting = false, isLoading = false, isRegeneratingSecret = false, isRunningLifecycleAction = false, isUpdating = false, lifecycleActions = [], onDelete, onLifecycleAction, onRegenerateSecret, onSecretDismiss, onUpdate, preferences }) => {
|
|
41
|
+
const { t } = useTranslation_default(preferences?.i18n);
|
|
42
|
+
const styles = useAdminPartStyles_default();
|
|
43
|
+
const [draft, setDraft] = useState(null);
|
|
44
|
+
const oauthConfig = getApplicationOAuthConfig(application);
|
|
45
|
+
const isWritable = Boolean(application) && !application?.isReadOnly;
|
|
46
|
+
const canRegenerate = isWritable && Boolean(oauthConfig) && !oauthConfig?.publicClient;
|
|
47
|
+
if (children) {
|
|
48
|
+
let oauth;
|
|
49
|
+
if (oauthConfig) {
|
|
50
|
+
const { clientSecret: storedSecret,...rest } = oauthConfig;
|
|
51
|
+
oauth = rest;
|
|
52
|
+
}
|
|
53
|
+
return /* @__PURE__ */ jsx("div", {
|
|
54
|
+
className,
|
|
55
|
+
children: children({
|
|
56
|
+
application,
|
|
57
|
+
clientSecret,
|
|
58
|
+
error,
|
|
59
|
+
isDeleting,
|
|
60
|
+
isLoading,
|
|
61
|
+
isRegeneratingSecret,
|
|
62
|
+
isRunningLifecycleAction,
|
|
63
|
+
isUpdating,
|
|
64
|
+
lifecycleActions: onLifecycleAction && application ? lifecycleActions : [],
|
|
65
|
+
oauth,
|
|
66
|
+
onDelete: isWritable ? onDelete : void 0,
|
|
67
|
+
onLifecycleAction: application ? onLifecycleAction : void 0,
|
|
68
|
+
onRegenerateSecret: canRegenerate ? onRegenerateSecret : void 0,
|
|
69
|
+
onSecretDismiss: clientSecret ? onSecretDismiss : void 0,
|
|
70
|
+
onUpdate: isWritable ? onUpdate : void 0
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (isLoading && !application) return /* @__PURE__ */ jsx(AdminSection_default, {
|
|
75
|
+
block: "application-details",
|
|
76
|
+
className,
|
|
77
|
+
preferences,
|
|
78
|
+
children: /* @__PURE__ */ jsxs("span", {
|
|
79
|
+
className: styles["muted"],
|
|
80
|
+
role: "status",
|
|
81
|
+
children: [
|
|
82
|
+
/* @__PURE__ */ jsx(Spinner_default, { size: "small" }),
|
|
83
|
+
" ",
|
|
84
|
+
t("admin.common.loading")
|
|
85
|
+
]
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
if (!application) return /* @__PURE__ */ jsx(AdminSection_default, {
|
|
89
|
+
block: "application-details",
|
|
90
|
+
className,
|
|
91
|
+
preferences,
|
|
92
|
+
children: /* @__PURE__ */ jsx(Alert_default, {
|
|
93
|
+
variant: "error",
|
|
94
|
+
role: "alert",
|
|
95
|
+
children: error ?? t("admin.common.errors.not_found")
|
|
96
|
+
})
|
|
97
|
+
});
|
|
98
|
+
const notSet = t("admin.applications.details.not_set");
|
|
99
|
+
const overview = [
|
|
100
|
+
{
|
|
101
|
+
label: t("admin.applications.list.columns.client_id"),
|
|
102
|
+
value: oauthConfig?.clientId ? /* @__PURE__ */ jsx(CopyableText_default, { value: oauthConfig.clientId }) : notSet
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
label: t("admin.applications.details.type"),
|
|
106
|
+
value: application.type ?? application.template ?? notSet
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
label: t("admin.common.columns.organization_unit"),
|
|
110
|
+
value: application.ouId ?? notSet
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
label: t("admin.applications.fields.url"),
|
|
114
|
+
value: application.url ?? notSet
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
label: t("admin.applications.fields.logo_url"),
|
|
118
|
+
value: application.logoUrl ?? notSet
|
|
119
|
+
}
|
|
120
|
+
];
|
|
121
|
+
if (application.status?.value) overview.push({
|
|
122
|
+
label: t("admin.common.columns.status"),
|
|
123
|
+
value: /* @__PURE__ */ jsx(AccessStatusBadge, { status: application.status.value })
|
|
124
|
+
});
|
|
125
|
+
const handleSave = (event) => {
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
if (!draft) return;
|
|
128
|
+
const { publicClient,...submission } = toSubmission(draft);
|
|
129
|
+
onUpdate?.(submission);
|
|
130
|
+
setDraft(null);
|
|
131
|
+
};
|
|
132
|
+
return /* @__PURE__ */ jsxs(AdminSection_default, {
|
|
133
|
+
block: "application-details",
|
|
134
|
+
className,
|
|
135
|
+
title: application.name,
|
|
136
|
+
description: application.description,
|
|
137
|
+
preferences,
|
|
138
|
+
actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
139
|
+
actions,
|
|
140
|
+
onLifecycleAction && /* @__PURE__ */ jsx(AccountLifecycleButtons, {
|
|
141
|
+
actions: lifecycleActions,
|
|
142
|
+
isRunning: isRunningLifecycleAction,
|
|
143
|
+
name: application.name,
|
|
144
|
+
onAction: onLifecycleAction
|
|
145
|
+
}),
|
|
146
|
+
onDelete && isWritable && /* @__PURE__ */ jsx(ConfirmButton, {
|
|
147
|
+
confirmText: t("admin.applications.details.delete.confirm", { name: application.name }),
|
|
148
|
+
isLoading: isDeleting,
|
|
149
|
+
onConfirm: onDelete,
|
|
150
|
+
children: t("admin.applications.details.delete.action")
|
|
151
|
+
})
|
|
152
|
+
] }),
|
|
153
|
+
children: [error && /* @__PURE__ */ jsx(Alert_default, {
|
|
154
|
+
variant: "error",
|
|
155
|
+
role: "alert",
|
|
156
|
+
children: error
|
|
157
|
+
}), draft ? /* @__PURE__ */ jsx(Panel, {
|
|
158
|
+
title: t("admin.applications.details.edit.action"),
|
|
159
|
+
children: /* @__PURE__ */ jsxs("form", {
|
|
160
|
+
className: styles["row"],
|
|
161
|
+
style: {
|
|
162
|
+
alignItems: "stretch",
|
|
163
|
+
flexDirection: "column"
|
|
164
|
+
},
|
|
165
|
+
onSubmit: handleSave,
|
|
166
|
+
noValidate: true,
|
|
167
|
+
children: [/* @__PURE__ */ jsx(ApplicationFormFields_default, {
|
|
168
|
+
preferences,
|
|
169
|
+
values: draft,
|
|
170
|
+
onInputChange: (field, value) => setDraft((previous) => previous && {
|
|
171
|
+
...previous,
|
|
172
|
+
[field]: value
|
|
173
|
+
}),
|
|
174
|
+
onGrantTypesChange: (grantTypes) => setDraft((previous) => previous && {
|
|
175
|
+
...previous,
|
|
176
|
+
grantTypes
|
|
177
|
+
})
|
|
178
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
179
|
+
className: styles["row"],
|
|
180
|
+
style: { justifyContent: "flex-end" },
|
|
181
|
+
children: [/* @__PURE__ */ jsx(Button_default, {
|
|
182
|
+
type: "button",
|
|
183
|
+
variant: "text",
|
|
184
|
+
disabled: isUpdating,
|
|
185
|
+
onClick: () => setDraft(null),
|
|
186
|
+
children: t("admin.common.actions.cancel")
|
|
187
|
+
}), /* @__PURE__ */ jsx(Button_default, {
|
|
188
|
+
type: "submit",
|
|
189
|
+
loading: isUpdating,
|
|
190
|
+
disabled: isUpdating || !isApplicationSubmissionValid(toSubmission(draft)),
|
|
191
|
+
children: t("admin.applications.details.edit.save")
|
|
192
|
+
})]
|
|
193
|
+
})]
|
|
194
|
+
})
|
|
195
|
+
}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Panel, {
|
|
196
|
+
title: t("admin.applications.details.overview"),
|
|
197
|
+
actions: onUpdate && isWritable ? /* @__PURE__ */ jsx(Button_default, {
|
|
198
|
+
variant: "outline",
|
|
199
|
+
size: "small",
|
|
200
|
+
onClick: () => setDraft(toFormValues(application, oauthConfig)),
|
|
201
|
+
children: t("admin.applications.details.edit.action")
|
|
202
|
+
}) : void 0,
|
|
203
|
+
children: /* @__PURE__ */ jsx(DetailList, { items: overview })
|
|
204
|
+
}), oauthConfig && /* @__PURE__ */ jsxs(Panel, {
|
|
205
|
+
title: t("admin.applications.details.oauth"),
|
|
206
|
+
actions: onRegenerateSecret && canRegenerate && !clientSecret ? /* @__PURE__ */ jsx(ConfirmButton, {
|
|
207
|
+
confirmText: t("admin.applications.details.secret.confirm", { name: application.name }),
|
|
208
|
+
isLoading: isRegeneratingSecret,
|
|
209
|
+
onConfirm: onRegenerateSecret,
|
|
210
|
+
children: t("admin.applications.details.secret.action")
|
|
211
|
+
}) : void 0,
|
|
212
|
+
children: [clientSecret && /* @__PURE__ */ jsx(ClientSecretNotice_default, {
|
|
213
|
+
secret: clientSecret,
|
|
214
|
+
onDismiss: onSecretDismiss,
|
|
215
|
+
preferences
|
|
216
|
+
}), /* @__PURE__ */ jsx(DetailList, { items: [
|
|
217
|
+
{
|
|
218
|
+
label: t("admin.applications.fields.grant_types"),
|
|
219
|
+
value: /* @__PURE__ */ jsx(ChipList, {
|
|
220
|
+
label: t("admin.applications.fields.grant_types"),
|
|
221
|
+
emptyText: t("admin.applications.details.no_grant_types"),
|
|
222
|
+
items: (oauthConfig.grantTypes ?? []).map((grantType) => ({
|
|
223
|
+
id: grantType,
|
|
224
|
+
label: APPLICATION_GRANT_TYPES.includes(grantType) ? t(`admin.applications.grant_types.${grantType}`) : grantType
|
|
225
|
+
}))
|
|
226
|
+
})
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
label: t("admin.applications.fields.redirect_uris"),
|
|
230
|
+
value: /* @__PURE__ */ jsx(ChipList, {
|
|
231
|
+
label: t("admin.applications.fields.redirect_uris"),
|
|
232
|
+
emptyText: t("admin.applications.details.no_redirect_uris"),
|
|
233
|
+
items: (oauthConfig.redirectUris ?? []).map((uri) => ({
|
|
234
|
+
id: uri,
|
|
235
|
+
label: uri
|
|
236
|
+
}))
|
|
237
|
+
})
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
label: t("admin.applications.details.public_client"),
|
|
241
|
+
value: oauthConfig.publicClient ? t("admin.applications.details.yes") : t("admin.applications.details.no")
|
|
242
|
+
}
|
|
243
|
+
] })]
|
|
244
|
+
})] })]
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
var BaseApplicationDetails_default = BaseApplicationDetails;
|
|
248
|
+
|
|
249
|
+
//#endregion
|
|
250
|
+
export { BaseApplicationDetails_default as default };
|
|
251
|
+
//# sourceMappingURL=BaseApplicationDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseApplicationDetails.js","names":["BaseApplicationDetails: FC<BaseApplicationDetailsProps>","useTranslation","styles: Record<string, string>","useAdminPartStyles","oauthConfig: OAuth2Config | undefined","isWritable: boolean","canRegenerate: boolean","oauth: Omit<OAuth2Config, 'clientSecret'> | undefined","AdminSection","Spinner","Alert","notSet: string","overview: DetailListItem[]","CopyableText","ApplicationFormFields","Button","ClientSecretNotice"],"sources":["../../../../src/components/admin/ApplicationDetails/BaseApplicationDetails.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n AccountLifecycleAction,\n Application,\n APPLICATION_GRANT_TYPES,\n ApplicationSubmission,\n getApplicationOAuthConfig,\n isApplicationSubmissionValid,\n OAuth2Config,\n parseRedirectUris,\n Preferences,\n} from '@thunderid/browser';\nimport {FC, FormEvent, ReactElement, ReactNode, useState} from 'react';\nimport useTranslation from '../../../hooks/useTranslation';\nimport Alert from '../../primitives/Alert/Alert';\nimport Button from '../../primitives/Button/Button';\nimport CopyableText from '../../primitives/CopyableText/CopyableText';\nimport Spinner from '../../primitives/Spinner/Spinner';\nimport {AccessStatusBadge, AccountLifecycleButtons} from '../shared/AccountLifecycleParts';\nimport {ChipList, ConfirmButton, DetailList, DetailListItem, Panel} from '../shared/AdminParts';\nimport AdminSection from '../shared/AdminSection';\nimport ApplicationFormFields, {ApplicationFormValues, ApplicationTextField} from '../shared/ApplicationFormFields';\nimport ClientSecretNotice from '../shared/ClientSecretNotice';\nimport useAdminPartStyles from '../shared/useAdminPartStyles';\n\n/**\n * The edited fields {@link BaseApplicationDetails} hands `onUpdate`. Whether the client is public does\n * not change.\n */\nexport type ApplicationUpdateSubmission = Omit<ApplicationSubmission, 'publicClient'>;\n\n/**\n * What {@link BaseApplicationDetails} hands its `children` render function, so the application can be\n * shown with any UI.\n */\nexport interface BaseApplicationDetailsRenderProps {\n application?: Application;\n /**\n * The new client secret, to show once. `null` while there is none.\n */\n clientSecret: string | null;\n error: string | null;\n isDeleting: boolean;\n isLoading: boolean;\n isRegeneratingSecret: boolean;\n isRunningLifecycleAction: boolean;\n isUpdating: boolean;\n /**\n * The account lifecycle actions offered for the application. Empty when none is allowed.\n */\n lifecycleActions: AccountLifecycleAction[];\n /**\n * The application's OAuth configuration, without its client secret. Undefined when it has no OAuth client.\n */\n oauth?: Omit<OAuth2Config, 'clientSecret'>;\n /**\n * Deletes the application. Undefined when deletion is not allowed, including for read-only applications.\n */\n onDelete?: () => void;\n /**\n * Runs an account lifecycle action. Undefined when none is allowed.\n */\n onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;\n /**\n * Gives the application a new client secret. Undefined when not allowed, for read-only applications\n * and for applications without a confidential OAuth client.\n */\n onRegenerateSecret?: () => void;\n /**\n * Hides the new client secret once it has been copied. Undefined while there is no secret.\n */\n onSecretDismiss?: () => void;\n /**\n * Saves edited fields. Undefined when editing is not allowed, including for read-only applications.\n */\n onUpdate?: (application: ApplicationUpdateSubmission) => void;\n}\n\nexport interface BaseApplicationDetailsProps {\n /**\n * Controls rendered next to the application's name.\n */\n actions?: ReactNode;\n application?: Application;\n /**\n * Renders custom UI in place of the default view. Receives the application, its OAuth configuration,\n * the loading and error state, the actions the app allows and the new client secret to show.\n */\n children?: (props: BaseApplicationDetailsRenderProps) => ReactNode;\n className?: string;\n /**\n * A client secret just generated by `onRegenerateSecret`, shown once until `onSecretDismiss` clears it.\n */\n clientSecret?: string | null;\n error?: string | null;\n isDeleting?: boolean;\n isLoading?: boolean;\n isRegeneratingSecret?: boolean;\n isRunningLifecycleAction?: boolean;\n isUpdating?: boolean;\n /**\n * The account lifecycle actions to offer (suspend, unsuspend; applications are never locked), shown only with `onLifecycleAction`. They change\n * only runtime state, so they apply to read-only applications too.\n */\n lifecycleActions?: AccountLifecycleAction[];\n /**\n * Deletes the application. The delete action is hidden when omitted.\n */\n onDelete?: () => void;\n /**\n * Runs an account lifecycle action. Suspending and unsuspending ask for confirmation first.\n */\n onLifecycleAction?: (action: AccountLifecycleAction, operatorNote?: string) => void;\n /**\n * Gives the application a new client secret. The regenerate action is hidden when omitted, and for\n * public clients, which have no secret.\n */\n onRegenerateSecret?: () => void;\n /**\n * Called when the user has copied the new client secret.\n */\n onSecretDismiss?: () => void;\n /**\n * Saves the edited general fields, redirect URIs and grant types. Editing is offered only when set.\n */\n onUpdate?: (application: ApplicationUpdateSubmission) => void;\n preferences?: Preferences;\n}\n\nconst toFormValues = (application: Application, oauth?: OAuth2Config): ApplicationFormValues => ({\n description: application.description ?? '',\n grantTypes: oauth?.grantTypes ?? [],\n logoUrl: application.logoUrl ?? '',\n name: application.name,\n publicClient: Boolean(oauth?.publicClient),\n redirectUris: (oauth?.redirectUris ?? []).join(', '),\n url: application.url ?? '',\n});\n\nconst toSubmission = (values: ApplicationFormValues): ApplicationSubmission => ({\n description: values.description.trim() || undefined,\n grantTypes: values.grantTypes,\n logoUrl: values.logoUrl.trim() || undefined,\n name: values.name.trim(),\n publicClient: values.publicClient,\n redirectUris: parseRedirectUris(values.redirectUris),\n url: values.url.trim() || undefined,\n});\n\n/**\n * Shows an application's general fields and OAuth configuration. Holds no data of its own: pass the\n * application and handle editing, deletion and client secret regeneration, each offered only when its\n * handler is set.\n */\nconst BaseApplicationDetails: FC<BaseApplicationDetailsProps> = ({\n actions,\n application,\n children,\n className,\n clientSecret = null,\n error = null,\n isDeleting = false,\n isLoading = false,\n isRegeneratingSecret = false,\n isRunningLifecycleAction = false,\n isUpdating = false,\n lifecycleActions = [],\n onDelete,\n onLifecycleAction,\n onRegenerateSecret,\n onSecretDismiss,\n onUpdate,\n preferences,\n}: BaseApplicationDetailsProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const styles: Record<string, string> = useAdminPartStyles();\n const [draft, setDraft] = useState<ApplicationFormValues | null>(null);\n\n const oauthConfig: OAuth2Config | undefined = getApplicationOAuthConfig(application);\n const isWritable: boolean = Boolean(application) && !application?.isReadOnly;\n const canRegenerate: boolean = isWritable && Boolean(oauthConfig) && !oauthConfig?.publicClient;\n\n if (children) {\n let oauth: Omit<OAuth2Config, 'clientSecret'> | undefined;\n\n if (oauthConfig) {\n const {clientSecret: storedSecret, ...rest}: OAuth2Config = oauthConfig;\n void storedSecret;\n oauth = rest;\n }\n\n return (\n <div className={className}>\n {children({\n application,\n clientSecret,\n error,\n isDeleting,\n isLoading,\n isRegeneratingSecret,\n isRunningLifecycleAction,\n isUpdating,\n lifecycleActions: onLifecycleAction && application ? lifecycleActions : [],\n oauth,\n onDelete: isWritable ? onDelete : undefined,\n onLifecycleAction: application ? onLifecycleAction : undefined,\n onRegenerateSecret: canRegenerate ? onRegenerateSecret : undefined,\n onSecretDismiss: clientSecret ? onSecretDismiss : undefined,\n onUpdate: isWritable ? onUpdate : undefined,\n })}\n </div>\n );\n }\n\n if (isLoading && !application) {\n return (\n <AdminSection block=\"application-details\" className={className} preferences={preferences}>\n <span className={styles['muted']} role=\"status\">\n <Spinner size=\"small\" /> {t('admin.common.loading')}\n </span>\n </AdminSection>\n );\n }\n\n if (!application) {\n return (\n <AdminSection block=\"application-details\" className={className} preferences={preferences}>\n <Alert variant=\"error\" role=\"alert\">\n {error ?? t('admin.common.errors.not_found')}\n </Alert>\n </AdminSection>\n );\n }\n\n const notSet: string = t('admin.applications.details.not_set');\n const overview: DetailListItem[] = [\n {\n label: t('admin.applications.list.columns.client_id'),\n value: oauthConfig?.clientId ? <CopyableText value={oauthConfig.clientId} /> : notSet,\n },\n {label: t('admin.applications.details.type'), value: application.type ?? application.template ?? notSet},\n {label: t('admin.common.columns.organization_unit'), value: application.ouId ?? notSet},\n {label: t('admin.applications.fields.url'), value: application.url ?? notSet},\n {label: t('admin.applications.fields.logo_url'), value: application.logoUrl ?? notSet},\n ];\n\n if (application.status?.value) {\n overview.push({\n label: t('admin.common.columns.status'),\n value: <AccessStatusBadge status={application.status.value} />,\n });\n }\n\n const handleSave = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n\n if (!draft) {\n return;\n }\n\n const {publicClient, ...submission}: ApplicationSubmission = toSubmission(draft);\n void publicClient;\n onUpdate?.(submission);\n setDraft(null);\n };\n\n return (\n <AdminSection\n block=\"application-details\"\n className={className}\n title={application.name}\n description={application.description}\n preferences={preferences}\n actions={\n <>\n {actions}\n {onLifecycleAction && (\n <AccountLifecycleButtons\n actions={lifecycleActions}\n isRunning={isRunningLifecycleAction}\n name={application.name}\n onAction={onLifecycleAction}\n />\n )}\n {onDelete && isWritable && (\n <ConfirmButton\n confirmText={t('admin.applications.details.delete.confirm', {name: application.name})}\n isLoading={isDeleting}\n onConfirm={onDelete}\n >\n {t('admin.applications.details.delete.action')}\n </ConfirmButton>\n )}\n </>\n }\n >\n {error && (\n <Alert variant=\"error\" role=\"alert\">\n {error}\n </Alert>\n )}\n {draft ? (\n <Panel title={t('admin.applications.details.edit.action')}>\n <form\n className={styles['row']}\n style={{alignItems: 'stretch', flexDirection: 'column'}}\n onSubmit={handleSave}\n noValidate\n >\n <ApplicationFormFields\n preferences={preferences}\n values={draft}\n onInputChange={(field: ApplicationTextField, value: string): void =>\n setDraft((previous: ApplicationFormValues | null) => previous && {...previous, [field]: value})\n }\n onGrantTypesChange={(grantTypes: string[]): void =>\n setDraft((previous: ApplicationFormValues | null) => previous && {...previous, grantTypes})\n }\n />\n <div className={styles['row']} style={{justifyContent: 'flex-end'}}>\n <Button type=\"button\" variant=\"text\" disabled={isUpdating} onClick={(): void => setDraft(null)}>\n {t('admin.common.actions.cancel')}\n </Button>\n <Button\n type=\"submit\"\n loading={isUpdating}\n disabled={isUpdating || !isApplicationSubmissionValid(toSubmission(draft))}\n >\n {t('admin.applications.details.edit.save')}\n </Button>\n </div>\n </form>\n </Panel>\n ) : (\n <>\n <Panel\n title={t('admin.applications.details.overview')}\n actions={\n onUpdate && isWritable ? (\n <Button\n variant=\"outline\"\n size=\"small\"\n onClick={(): void => setDraft(toFormValues(application, oauthConfig))}\n >\n {t('admin.applications.details.edit.action')}\n </Button>\n ) : undefined\n }\n >\n <DetailList items={overview} />\n </Panel>\n {oauthConfig && (\n <Panel\n title={t('admin.applications.details.oauth')}\n actions={\n onRegenerateSecret && canRegenerate && !clientSecret ? (\n <ConfirmButton\n confirmText={t('admin.applications.details.secret.confirm', {name: application.name})}\n isLoading={isRegeneratingSecret}\n onConfirm={onRegenerateSecret}\n >\n {t('admin.applications.details.secret.action')}\n </ConfirmButton>\n ) : undefined\n }\n >\n {clientSecret && (\n <ClientSecretNotice secret={clientSecret} onDismiss={onSecretDismiss} preferences={preferences} />\n )}\n <DetailList\n items={[\n {\n label: t('admin.applications.fields.grant_types'),\n value: (\n <ChipList\n label={t('admin.applications.fields.grant_types')}\n emptyText={t('admin.applications.details.no_grant_types')}\n items={(oauthConfig.grantTypes ?? []).map((grantType: string) => ({\n id: grantType,\n label: APPLICATION_GRANT_TYPES.includes(grantType)\n ? t(`admin.applications.grant_types.${grantType}`)\n : grantType,\n }))}\n />\n ),\n },\n {\n label: t('admin.applications.fields.redirect_uris'),\n value: (\n <ChipList\n label={t('admin.applications.fields.redirect_uris')}\n emptyText={t('admin.applications.details.no_redirect_uris')}\n items={(oauthConfig.redirectUris ?? []).map((uri: string) => ({id: uri, label: uri}))}\n />\n ),\n },\n {\n label: t('admin.applications.details.public_client'),\n value: oauthConfig.publicClient\n ? t('admin.applications.details.yes')\n : t('admin.applications.details.no'),\n },\n ]}\n />\n </Panel>\n )}\n </>\n )}\n </AdminSection>\n );\n};\n\nexport default BaseApplicationDetails;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { BaseApplicationListProps } from './BaseApplicationList';
|
|
3
|
+
export type ApplicationListProps = Omit<BaseApplicationListProps, 'applications' | 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'totalResults'>;
|
|
4
|
+
/**
|
|
5
|
+
* Lists the applications the signed-in user is allowed to see, a page at a time.
|
|
6
|
+
*
|
|
7
|
+
* The server guards applications with the root `system` permission, for reading and for changes alike;
|
|
8
|
+
* it defines no application-specific permission. Gate the view and its actions on it with
|
|
9
|
+
* `useGrantedPermissions().can('system')`.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <ApplicationList onSelect={(application) => setSelectedApplicationId(application.id)} />
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare const ApplicationList: FC<ApplicationListProps>;
|
|
17
|
+
export default ApplicationList;
|
|
18
|
+
//# sourceMappingURL=ApplicationList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationList/ApplicationList.tsx"],"names":[],"mappings":"AASA,OAAO,EAAC,EAAE,EAAyB,MAAM,OAAO,CAAC;AACjD,OAA4B,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAKpF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,wBAAwB,EACxB,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,CACpF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA0B7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import useTranslation_default from "../../../hooks/useTranslation.js";
|
|
2
|
+
import useManagementEndpoint_default from "../../../hooks/management/useManagementEndpoint.js";
|
|
3
|
+
import useResourceQuery_default from "../../../hooks/management/useResourceQuery.js";
|
|
4
|
+
import BaseApplicationList_default from "./BaseApplicationList.js";
|
|
5
|
+
import { ApplicationQueryKeys, getApplications, toManagementErrorMessage } from "@thunderid/browser";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
|
|
9
|
+
//#region src/components/admin/ApplicationList/ApplicationList.tsx
|
|
10
|
+
/**
|
|
11
|
+
* Lists the applications the signed-in user is allowed to see, a page at a time.
|
|
12
|
+
*
|
|
13
|
+
* The server guards applications with the root `system` permission, for reading and for changes alike;
|
|
14
|
+
* it defines no application-specific permission. Gate the view and its actions on it with
|
|
15
|
+
* `useGrantedPermissions().can('system')`.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <ApplicationList onSelect={(application) => setSelectedApplicationId(application.id)} />
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
const ApplicationList = ({ limit = 20, preferences,...rest }) => {
|
|
23
|
+
const { t } = useTranslation_default(preferences?.i18n);
|
|
24
|
+
const [offset, setOffset] = useState(0);
|
|
25
|
+
const endpoint = useManagementEndpoint_default("applications");
|
|
26
|
+
const { data, error, isLoading } = useResourceQuery_default([ApplicationQueryKeys.APPLICATIONS, {
|
|
27
|
+
limit,
|
|
28
|
+
offset
|
|
29
|
+
}], (fetcher) => getApplications({
|
|
30
|
+
...endpoint,
|
|
31
|
+
fetcher,
|
|
32
|
+
limit,
|
|
33
|
+
offset
|
|
34
|
+
}));
|
|
35
|
+
return /* @__PURE__ */ jsx(BaseApplicationList_default, {
|
|
36
|
+
applications: data?.applications ?? [],
|
|
37
|
+
totalResults: data?.totalResults,
|
|
38
|
+
isLoading,
|
|
39
|
+
error: toManagementErrorMessage(t, error, "admin.applications.list.error"),
|
|
40
|
+
limit,
|
|
41
|
+
offset,
|
|
42
|
+
onPageChange: setOffset,
|
|
43
|
+
preferences,
|
|
44
|
+
...rest
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
var ApplicationList_default = ApplicationList;
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { ApplicationList_default as default };
|
|
51
|
+
//# sourceMappingURL=ApplicationList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationList.js","names":["ApplicationList: FC<ApplicationListProps>","useTranslation","endpoint: ManagementEndpoint","useManagementEndpoint","useResourceQuery","BaseApplicationList"],"sources":["../../../../src/components/admin/ApplicationList/ApplicationList.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n ApplicationListResponse,\n ApplicationQueryKeys,\n getApplications,\n toManagementErrorMessage,\n} from '@thunderid/browser';\nimport {FC, ReactElement, useState} from 'react';\nimport BaseApplicationList, {BaseApplicationListProps} from './BaseApplicationList';\nimport useManagementEndpoint, {ManagementEndpoint} from '../../../hooks/management/useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryResult} from '../../../hooks/management/useResourceQuery';\nimport useTranslation from '../../../hooks/useTranslation';\n\nexport type ApplicationListProps = Omit<\n BaseApplicationListProps,\n 'applications' | 'error' | 'isLoading' | 'offset' | 'onPageChange' | 'totalResults'\n>;\n\n/**\n * Lists the applications the signed-in user is allowed to see, a page at a time.\n *\n * The server guards applications with the root `system` permission, for reading and for changes alike;\n * it defines no application-specific permission. Gate the view and its actions on it with\n * `useGrantedPermissions().can('system')`.\n *\n * @example\n * ```tsx\n * <ApplicationList onSelect={(application) => setSelectedApplicationId(application.id)} />\n * ```\n */\nconst ApplicationList: FC<ApplicationListProps> = ({\n limit = 20,\n preferences,\n ...rest\n}: ApplicationListProps): ReactElement => {\n const {t} = useTranslation(preferences?.i18n);\n const [offset, setOffset] = useState<number>(0);\n const endpoint: ManagementEndpoint = useManagementEndpoint('applications');\n const {data, error, isLoading}: ResourceQueryResult<ApplicationListResponse> = useResourceQuery(\n [ApplicationQueryKeys.APPLICATIONS, {limit, offset}],\n (fetcher) => getApplications({...endpoint, fetcher, limit, offset}),\n );\n\n return (\n <BaseApplicationList\n applications={data?.applications ?? []}\n totalResults={data?.totalResults}\n isLoading={isLoading}\n error={toManagementErrorMessage(t, error, 'admin.applications.list.error')}\n limit={limit}\n offset={offset}\n onPageChange={setOffset}\n preferences={preferences}\n {...rest}\n />\n );\n};\n\nexport default ApplicationList;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgCA,MAAMA,mBAA6C,EACjD,QAAQ,IACR,YACA,GAAG,WACqC;CACxC,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,EAAE;CAC/C,MAAMC,WAA+BC,8BAAsB,eAAe;CAC1E,MAAM,EAAC,MAAM,OAAO,cAA2DC,yBAC7E,CAAC,qBAAqB,cAAc;EAAC;EAAO;EAAO,CAAC,GACnD,YAAY,gBAAgB;EAAC,GAAG;EAAU;EAAS;EAAO;EAAO,CAAC,CACpE;AAED,QACE,oBAACC;EACC,cAAc,MAAM,gBAAgB,EAAE;EACtC,cAAc,MAAM;EACT;EACX,OAAO,yBAAyB,GAAG,OAAO,gCAAgC;EACnE;EACC;EACR,cAAc;EACD;EACb,GAAI;GACJ;;AAIN,8BAAe"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BasicApplication, Preferences } from '@thunderid/browser';
|
|
2
|
+
import { FC, ReactNode } from 'react';
|
|
3
|
+
import { AdminListRenderProps } from '../shared/AdminListRenderProps';
|
|
4
|
+
/**
|
|
5
|
+
* What {@link BaseApplicationList} hands its `children` render function. `applications` and `rows` are
|
|
6
|
+
* the same array.
|
|
7
|
+
*/
|
|
8
|
+
export type BaseApplicationListRenderProps = AdminListRenderProps<BasicApplication> & {
|
|
9
|
+
applications: BasicApplication[];
|
|
10
|
+
};
|
|
11
|
+
export interface BaseApplicationListProps {
|
|
12
|
+
/**
|
|
13
|
+
* Controls rendered next to the title, such as a button that opens `ApplicationCreate`.
|
|
14
|
+
*/
|
|
15
|
+
actions?: ReactNode;
|
|
16
|
+
applications: BasicApplication[];
|
|
17
|
+
/**
|
|
18
|
+
* Renders custom UI in place of the default table, for example a third-party data grid. Receives
|
|
19
|
+
* the applications, the default columns, the loading and error state, and the pagination and
|
|
20
|
+
* selection handlers.
|
|
21
|
+
*/
|
|
22
|
+
children?: (props: BaseApplicationListRenderProps) => ReactNode;
|
|
23
|
+
className?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
error?: string | null;
|
|
26
|
+
isLoading?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Page size.
|
|
29
|
+
* @default 20
|
|
30
|
+
*/
|
|
31
|
+
limit?: number;
|
|
32
|
+
offset?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Called with the offset of the page to show. Pagination is hidden when omitted.
|
|
35
|
+
*/
|
|
36
|
+
onPageChange?: (offset: number) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Called when an application is chosen. Rows are selectable only when set.
|
|
39
|
+
*/
|
|
40
|
+
onSelect?: (application: BasicApplication) => void;
|
|
41
|
+
preferences?: Preferences;
|
|
42
|
+
selectedApplicationId?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Heading of the list. Pass an empty string to hide it.
|
|
45
|
+
*/
|
|
46
|
+
title?: string;
|
|
47
|
+
totalResults?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Lists applications with their client identifier, type and, when the server reports it, access status. Holds no data of its own: pass the page
|
|
51
|
+
* of applications and handle selection and pagination.
|
|
52
|
+
*/
|
|
53
|
+
declare const BaseApplicationList: FC<BaseApplicationListProps>;
|
|
54
|
+
export default BaseApplicationList;
|
|
55
|
+
//# sourceMappingURL=BaseApplicationList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseApplicationList.d.ts","sourceRoot":"","sources":["../../../../src/components/admin/ApplicationList/BaseApplicationList.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,EAAE,EAAgB,SAAS,EAAC,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAGpE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,GAAG;IACpF,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,SAAS,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD;;;GAGG;AACH,QAAA,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CA6FrD,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|