@orthacms/users-admin 0.0.0-reserve.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/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/lib/api/useAddWorkspaceMember/index.d.ts +16 -0
- package/dist/lib/api/useAddWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/api/useInviteMember/index.d.ts +17 -0
- package/dist/lib/api/useInviteMember/index.d.ts.map +1 -0
- package/dist/lib/api/useMembers/index.d.ts +15 -0
- package/dist/lib/api/useMembers/index.d.ts.map +1 -0
- package/dist/lib/api/useMembersMutation/index.d.ts +13 -0
- package/dist/lib/api/useMembersMutation/index.d.ts.map +1 -0
- package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts +15 -0
- package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/api/useResendInvite/index.d.ts +8 -0
- package/dist/lib/api/useResendInvite/index.d.ts.map +1 -0
- package/dist/lib/api/useRevokeInvite/index.d.ts +7 -0
- package/dist/lib/api/useRevokeInvite/index.d.ts.map +1 -0
- package/dist/lib/api/useRevokeSession/index.d.ts +15 -0
- package/dist/lib/api/useRevokeSession/index.d.ts.map +1 -0
- package/dist/lib/api/useSetMemberStatus/index.d.ts +15 -0
- package/dist/lib/api/useSetMemberStatus/index.d.ts.map +1 -0
- package/dist/lib/api/useUpdateMember/index.d.ts +15 -0
- package/dist/lib/api/useUpdateMember/index.d.ts.map +1 -0
- package/dist/lib/api/useUserDetail/index.d.ts +9 -0
- package/dist/lib/api/useUserDetail/index.d.ts.map +1 -0
- package/dist/lib/api/useUserSessions/index.d.ts +25 -0
- package/dist/lib/api/useUserSessions/index.d.ts.map +1 -0
- package/dist/lib/api/useWorkspaceOptions/index.d.ts +18 -0
- package/dist/lib/api/useWorkspaceOptions/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceMember/index.d.ts +11 -0
- package/dist/lib/application/useAddWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceMember/index.js +21 -0
- package/dist/lib/application/useInviteMember/index.d.ts +12 -0
- package/dist/lib/application/useInviteMember/index.d.ts.map +1 -0
- package/dist/lib/application/useInviteMember/index.js +12 -0
- package/dist/lib/application/useInviteMemberFlow/index.d.ts +59 -0
- package/dist/lib/application/useInviteMemberFlow/index.d.ts.map +1 -0
- package/dist/lib/application/useInviteMemberFlow/index.js +47 -0
- package/dist/lib/application/useIssuePasswordReset/index.d.ts +12 -0
- package/dist/lib/application/useIssuePasswordReset/index.d.ts.map +1 -0
- package/dist/lib/application/useIssuePasswordReset/index.js +14 -0
- package/dist/lib/application/useMembers/index.d.ts +15 -0
- package/dist/lib/application/useMembers/index.d.ts.map +1 -0
- package/dist/lib/application/useMembers/index.js +23 -0
- package/dist/lib/application/useMembersMutation/index.d.ts +14 -0
- package/dist/lib/application/useMembersMutation/index.d.ts.map +1 -0
- package/dist/lib/application/useMembersMutation/index.js +25 -0
- package/dist/lib/application/usePreferences/index.d.ts +15 -0
- package/dist/lib/application/usePreferences/index.d.ts.map +1 -0
- package/dist/lib/application/usePreferences/index.js +28 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts +10 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.js +20 -0
- package/dist/lib/application/useResendInvite/index.d.ts +10 -0
- package/dist/lib/application/useResendInvite/index.d.ts.map +1 -0
- package/dist/lib/application/useResendInvite/index.js +12 -0
- package/dist/lib/application/useRevokeInvite/index.d.ts +7 -0
- package/dist/lib/application/useRevokeInvite/index.d.ts.map +1 -0
- package/dist/lib/application/useRevokeInvite/index.js +10 -0
- package/dist/lib/application/useRevokeSession/index.d.ts +10 -0
- package/dist/lib/application/useRevokeSession/index.d.ts.map +1 -0
- package/dist/lib/application/useRevokeSession/index.js +19 -0
- package/dist/lib/application/useSetMemberStatus/index.d.ts +11 -0
- package/dist/lib/application/useSetMemberStatus/index.d.ts.map +1 -0
- package/dist/lib/application/useSetMemberStatus/index.js +11 -0
- package/dist/lib/application/useUpdateMember/index.d.ts +11 -0
- package/dist/lib/application/useUpdateMember/index.d.ts.map +1 -0
- package/dist/lib/application/useUpdateMember/index.js +11 -0
- package/dist/lib/application/useUpdateTheme/index.d.ts +14 -0
- package/dist/lib/application/useUpdateTheme/index.d.ts.map +1 -0
- package/dist/lib/application/useUpdateTheme/index.js +25 -0
- package/dist/lib/application/useUserDetail/index.d.ts +9 -0
- package/dist/lib/application/useUserDetail/index.d.ts.map +1 -0
- package/dist/lib/application/useUserDetail/index.js +17 -0
- package/dist/lib/application/useUserSessions/index.d.ts +9 -0
- package/dist/lib/application/useUserSessions/index.d.ts.map +1 -0
- package/dist/lib/application/useUserSessions/index.js +17 -0
- package/dist/lib/application/useWorkspaceOptions/index.d.ts +10 -0
- package/dist/lib/application/useWorkspaceOptions/index.d.ts.map +1 -0
- package/dist/lib/application/useWorkspaceOptions/index.js +17 -0
- package/dist/lib/components/AccountMenu/index.d.ts +9 -0
- package/dist/lib/components/AccountMenu/index.d.ts.map +1 -0
- package/dist/lib/components/AddToWorkspacesDialog/index.d.ts +19 -0
- package/dist/lib/components/AddToWorkspacesDialog/index.d.ts.map +1 -0
- package/dist/lib/components/BackLink/index.d.ts +14 -0
- package/dist/lib/components/BackLink/index.d.ts.map +1 -0
- package/dist/lib/components/ConfirmDialog/index.d.ts +30 -0
- package/dist/lib/components/ConfirmDialog/index.d.ts.map +1 -0
- package/dist/lib/components/EditMemberDialog/index.d.ts +21 -0
- package/dist/lib/components/EditMemberDialog/index.d.ts.map +1 -0
- package/dist/lib/components/MemberAvatar/index.d.ts +24 -0
- package/dist/lib/components/MemberAvatar/index.d.ts.map +1 -0
- package/dist/lib/components/MembersEmpty/index.d.ts +16 -0
- package/dist/lib/components/MembersEmpty/index.d.ts.map +1 -0
- package/dist/lib/components/MembersNoAccess/index.d.ts +7 -0
- package/dist/lib/components/MembersNoAccess/index.d.ts.map +1 -0
- package/dist/lib/components/MembersPagination/index.d.ts +17 -0
- package/dist/lib/components/MembersPagination/index.d.ts.map +1 -0
- package/dist/lib/components/MembersSkeleton/index.d.ts +32 -0
- package/dist/lib/components/MembersSkeleton/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberRoleChip/index.d.ts +10 -0
- package/dist/lib/components/MembersTable/MemberRoleChip/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberRowActions/index.d.ts +16 -0
- package/dist/lib/components/MembersTable/MemberRowActions/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberStatusBadge/index.d.ts +10 -0
- package/dist/lib/components/MembersTable/MemberStatusBadge/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/MemberWorkspaces/index.d.ts +10 -0
- package/dist/lib/components/MembersTable/MemberWorkspaces/index.d.ts.map +1 -0
- package/dist/lib/components/MembersTable/index.d.ts +12 -0
- package/dist/lib/components/MembersTable/index.d.ts.map +1 -0
- package/dist/lib/components/MembersToolbar/index.d.ts +13 -0
- package/dist/lib/components/MembersToolbar/index.d.ts.map +1 -0
- package/dist/lib/components/RolePicker/index.d.ts +18 -0
- package/dist/lib/components/RolePicker/index.d.ts.map +1 -0
- package/dist/lib/components/SessionCard/index.d.ts +15 -0
- package/dist/lib/components/SessionCard/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserDetailTabs/index.d.ts +13 -0
- package/dist/lib/components/UserDetailLayout/UserDetailTabs/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserHero/index.d.ts +10 -0
- package/dist/lib/components/UserDetailLayout/UserHero/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserSideRail/index.d.ts +12 -0
- package/dist/lib/components/UserDetailLayout/UserSideRail/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/UserStatsStrip/index.d.ts +10 -0
- package/dist/lib/components/UserDetailLayout/UserStatsStrip/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailLayout/index.d.ts +13 -0
- package/dist/lib/components/UserDetailLayout/index.d.ts.map +1 -0
- package/dist/lib/components/UserDetailRouter/index.d.ts +13 -0
- package/dist/lib/components/UserDetailRouter/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceMembershipCard/index.d.ts +15 -0
- package/dist/lib/components/WorkspaceMembershipCard/index.d.ts.map +1 -0
- package/dist/lib/domain/member/index.d.ts +61 -0
- package/dist/lib/domain/member/index.d.ts.map +1 -0
- package/dist/lib/domain/member/index.js +61 -0
- package/dist/lib/domain/types/member/index.d.ts +90 -0
- package/dist/lib/domain/types/member/index.d.ts.map +1 -0
- package/dist/lib/domain/types/member/index.js +1 -0
- package/dist/lib/domain/types/session/index.d.ts +18 -0
- package/dist/lib/domain/types/session/index.d.ts.map +1 -0
- package/dist/lib/domain/types/session/index.js +1 -0
- package/dist/lib/domain/types/workspaceOption/index.d.ts +15 -0
- package/dist/lib/domain/types/workspaceOption/index.d.ts.map +1 -0
- package/dist/lib/domain/types/workspaceOption/index.js +1 -0
- package/dist/lib/domain/value-objects/email/index.d.ts +24 -0
- package/dist/lib/domain/value-objects/email/index.d.ts.map +1 -0
- package/dist/lib/domain/value-objects/email/index.js +45 -0
- package/dist/lib/infrastructure/httpMemberGateway/index.d.ts +12 -0
- package/dist/lib/infrastructure/httpMemberGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/httpMemberGateway/index.js +158 -0
- package/dist/lib/infrastructure/inviteLink/index.d.ts +13 -0
- package/dist/lib/infrastructure/inviteLink/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/inviteLink/index.js +23 -0
- package/dist/lib/infrastructure/memberGateway/index.d.ts +103 -0
- package/dist/lib/infrastructure/memberGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/memberGateway/index.js +1 -0
- package/dist/lib/infrastructure/memberMapper/index.d.ts +59 -0
- package/dist/lib/infrastructure/memberMapper/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/memberMapper/index.js +52 -0
- package/dist/lib/infrastructure/membersKeys/index.d.ts +37 -0
- package/dist/lib/infrastructure/membersKeys/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/membersKeys/index.js +25 -0
- package/dist/lib/infrastructure/passwordResetLink/index.d.ts +13 -0
- package/dist/lib/infrastructure/passwordResetLink/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/passwordResetLink/index.js +24 -0
- package/dist/lib/infrastructure/preferencesGateway/index.d.ts +37 -0
- package/dist/lib/infrastructure/preferencesGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/preferencesGateway/index.js +43 -0
- package/dist/lib/pages/InviteMemberPage/index.d.ts +7 -0
- package/dist/lib/pages/InviteMemberPage/index.d.ts.map +1 -0
- package/dist/lib/pages/MembersPage/index.d.ts +13 -0
- package/dist/lib/pages/MembersPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserAccessPage/index.d.ts +9 -0
- package/dist/lib/pages/UserAccessPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserActivityPage/index.d.ts +8 -0
- package/dist/lib/pages/UserActivityPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserGeneralPage/index.d.ts +7 -0
- package/dist/lib/pages/UserGeneralPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserRolesPage/index.d.ts +8 -0
- package/dist/lib/pages/UserRolesPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserSessionsPage/index.d.ts +7 -0
- package/dist/lib/pages/UserSessionsPage/index.d.ts.map +1 -0
- package/dist/lib/pages/UserWorkspacesPage/index.d.ts +8 -0
- package/dist/lib/pages/UserWorkspacesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/AccountMenu/index.d.ts +9 -0
- package/dist/lib/presentation/components/AccountMenu/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/AccountMenu/index.js +42 -0
- package/dist/lib/presentation/components/AddToWorkspacesDialog/index.d.ts +19 -0
- package/dist/lib/presentation/components/AddToWorkspacesDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/AddToWorkspacesDialog/index.js +89 -0
- package/dist/lib/presentation/components/BackLink/index.d.ts +14 -0
- package/dist/lib/presentation/components/BackLink/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/BackLink/index.js +12 -0
- package/dist/lib/presentation/components/InviteLinkDialog/index.d.ts +25 -0
- package/dist/lib/presentation/components/InviteLinkDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/InviteLinkDialog/index.js +77 -0
- package/dist/lib/presentation/components/InviteLinkPanel/index.d.ts +26 -0
- package/dist/lib/presentation/components/InviteLinkPanel/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/InviteLinkPanel/index.js +59 -0
- package/dist/lib/presentation/components/InviteSent/index.d.ts +20 -0
- package/dist/lib/presentation/components/InviteSent/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/InviteSent/index.js +60 -0
- package/dist/lib/presentation/components/MemberAvatar/index.d.ts +24 -0
- package/dist/lib/presentation/components/MemberAvatar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MemberAvatar/index.js +14 -0
- package/dist/lib/presentation/components/MembersEmpty/index.d.ts +16 -0
- package/dist/lib/presentation/components/MembersEmpty/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersEmpty/index.js +42 -0
- package/dist/lib/presentation/components/MembersNoAccess/index.d.ts +7 -0
- package/dist/lib/presentation/components/MembersNoAccess/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersNoAccess/index.js +24 -0
- package/dist/lib/presentation/components/MembersPagination/index.d.ts +17 -0
- package/dist/lib/presentation/components/MembersPagination/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersPagination/index.js +45 -0
- package/dist/lib/presentation/components/MembersSkeleton/index.d.ts +32 -0
- package/dist/lib/presentation/components/MembersSkeleton/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersSkeleton/index.js +61 -0
- package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.d.ts +17 -0
- package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberRoleChip/index.js +36 -0
- package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.d.ts +16 -0
- package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberRowActions/index.js +284 -0
- package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.d.ts +10 -0
- package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberStatusBadge/index.js +49 -0
- package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.d.ts +10 -0
- package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/MemberWorkspaces/index.js +37 -0
- package/dist/lib/presentation/components/MembersTable/index.d.ts +12 -0
- package/dist/lib/presentation/components/MembersTable/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersTable/index.js +54 -0
- package/dist/lib/presentation/components/MembersTable/membersTableAnchor/index.d.ts +14 -0
- package/dist/lib/presentation/components/MembersTable/membersTableAnchor/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersToolbar/index.d.ts +15 -0
- package/dist/lib/presentation/components/MembersToolbar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/MembersToolbar/index.js +23 -0
- package/dist/lib/presentation/components/PasswordResetCard/index.d.ts +19 -0
- package/dist/lib/presentation/components/PasswordResetCard/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/PasswordResetCard/index.js +109 -0
- package/dist/lib/presentation/components/PasswordResetLinkDialog/index.d.ts +27 -0
- package/dist/lib/presentation/components/PasswordResetLinkDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/PasswordResetLinkDialog/index.js +79 -0
- package/dist/lib/presentation/components/PasswordResetLinkPanel/index.d.ts +31 -0
- package/dist/lib/presentation/components/PasswordResetLinkPanel/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/PasswordResetLinkPanel/index.js +64 -0
- package/dist/lib/presentation/components/RolePicker/index.d.ts +21 -0
- package/dist/lib/presentation/components/RolePicker/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/RolePicker/index.js +51 -0
- package/dist/lib/presentation/components/SessionCard/index.d.ts +15 -0
- package/dist/lib/presentation/components/SessionCard/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/SessionCard/index.js +43 -0
- package/dist/lib/presentation/components/ThemeSync/index.d.ts +21 -0
- package/dist/lib/presentation/components/ThemeSync/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/ThemeSync/index.js +32 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.d.ts +15 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserDetailTabs/index.js +52 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.d.ts +10 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserHero/index.js +26 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.d.ts +10 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/UserStatsStrip/index.js +39 -0
- package/dist/lib/presentation/components/UserDetailLayout/index.d.ts +13 -0
- package/dist/lib/presentation/components/UserDetailLayout/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailLayout/index.js +101 -0
- package/dist/lib/presentation/components/UserDetailRouter/index.d.ts +16 -0
- package/dist/lib/presentation/components/UserDetailRouter/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/UserDetailRouter/index.js +33 -0
- package/dist/lib/presentation/components/WorkspaceMembershipCard/index.d.ts +15 -0
- package/dist/lib/presentation/components/WorkspaceMembershipCard/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceMembershipCard/index.js +27 -0
- package/dist/lib/presentation/membersFilterFields/index.d.ts +10 -0
- package/dist/lib/presentation/membersFilterFields/index.d.ts.map +1 -0
- package/dist/lib/presentation/membersFilterFields/index.js +67 -0
- package/dist/lib/presentation/membersResultsAnchor/index.d.ts +17 -0
- package/dist/lib/presentation/membersResultsAnchor/index.d.ts.map +1 -0
- package/dist/lib/presentation/membersResultsAnchor/index.js +16 -0
- package/dist/lib/presentation/pages/InviteMemberPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/InviteMemberPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/InviteMemberPage/index.js +346 -0
- package/dist/lib/presentation/pages/MembersPage/index.d.ts +13 -0
- package/dist/lib/presentation/pages/MembersPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/MembersPage/index.js +140 -0
- package/dist/lib/presentation/pages/UserAccessPage/index.d.ts +18 -0
- package/dist/lib/presentation/pages/UserAccessPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserAccessPage/index.js +153 -0
- package/dist/lib/presentation/pages/UserActivityPage/index.d.ts +8 -0
- package/dist/lib/presentation/pages/UserActivityPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserActivityPage/index.js +228 -0
- package/dist/lib/presentation/pages/UserGeneralPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/UserGeneralPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserGeneralPage/index.js +72 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.d.ts +11 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/ThemePreview.js +24 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/index.d.ts +10 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserPreferencesPage/index.js +148 -0
- package/dist/lib/presentation/pages/UserRolesPage/index.d.ts +8 -0
- package/dist/lib/presentation/pages/UserRolesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserRolesPage/index.js +110 -0
- package/dist/lib/presentation/pages/UserSessionsPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/UserSessionsPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserSessionsPage/index.js +121 -0
- package/dist/lib/presentation/pages/UserWorkspacesPage/index.d.ts +8 -0
- package/dist/lib/presentation/pages/UserWorkspacesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/UserWorkspacesPage/index.js +111 -0
- package/dist/lib/presentation/userDetailContext/index.d.ts +13 -0
- package/dist/lib/presentation/userDetailContext/index.d.ts.map +1 -0
- package/dist/lib/presentation/userDetailContext/index.js +5 -0
- package/dist/lib/presentation/usersPlugin/index.d.ts +27 -0
- package/dist/lib/presentation/usersPlugin/index.d.ts.map +1 -0
- package/dist/lib/presentation/usersPlugin/index.js +109 -0
- package/dist/lib/types/member/index.d.ts +63 -0
- package/dist/lib/types/member/index.d.ts.map +1 -0
- package/dist/lib/utils/membersFilterFields/index.d.ts +10 -0
- package/dist/lib/utils/membersFilterFields/index.d.ts.map +1 -0
- package/dist/lib/utils/membersKeys/index.d.ts +27 -0
- package/dist/lib/utils/membersKeys/index.d.ts.map +1 -0
- package/dist/lib/utils/toMember/index.d.ts +33 -0
- package/dist/lib/utils/toMember/index.d.ts.map +1 -0
- package/dist/lib/utils/userDetailContext/index.d.ts +13 -0
- package/dist/lib/utils/userDetailContext/index.d.ts.map +1 -0
- package/dist/lib/utils/usersPlugin/index.d.ts +27 -0
- package/dist/lib/utils/usersPlugin/index.d.ts.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ortha CMS contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { UsersPlugin } from './lib/presentation/usersPlugin';
|
|
2
|
+
export type { UsersAdminPlugin } from './lib/presentation/usersPlugin';
|
|
3
|
+
export { useMembers } from './lib/application/useMembers';
|
|
4
|
+
export { membersKeys } from './lib/infrastructure/membersKeys';
|
|
5
|
+
export type { Member, MemberList, MemberRole, MemberStatus, MemberWorkspace } from './lib/domain/types/member';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,YAAY,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,YAAY,EACZ,eAAe,EAClB,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ApiError } from '@ortha-cms/utils-admin';
|
|
2
|
+
/** Identifies the membership to create: which member, which workspace. */
|
|
3
|
+
export type AddWorkspaceMemberInput = {
|
|
4
|
+
/** The member being added. */
|
|
5
|
+
userId: string;
|
|
6
|
+
/** The workspace to add them to. */
|
|
7
|
+
workspaceId: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Adds a member to a workspace from the Workspaces tab. The endpoint is
|
|
11
|
+
* idempotent (re-adding is a no-op). Invalidates the member's detail (its
|
|
12
|
+
* `workspaces` list) and the members list (its Workspaces column) on success.
|
|
13
|
+
* Errors normalize to {@link ApiError}.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useAddWorkspaceMember(): import("@tanstack/react-query").UseMutationResult<void, ApiError, AddWorkspaceMemberInput, unknown>;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useAddWorkspaceMember/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9E,0EAA0E;AAC1E,MAAM,MAAM,uBAAuB,GAAG;IAClC,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF;;;;;GAKG;AACH,wBAAgB,qBAAqB,wGAcpC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Member, MemberRole } from '../../types/member';
|
|
2
|
+
/** The shape the invite form submits. */
|
|
3
|
+
export type InviteMemberInput = {
|
|
4
|
+
email: string;
|
|
5
|
+
role: MemberRole;
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Workspaces to grant the new member access to (optional). */
|
|
8
|
+
workspaceIds?: string[];
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Invites a person by email. Errors are normalized to `ApiError` so the dialog
|
|
12
|
+
* can branch on `HTTP_STATUS.CONFLICT` (email already taken); every page of the
|
|
13
|
+
* members cache is refreshed on success — the new "Invited" row may land on any
|
|
14
|
+
* page.
|
|
15
|
+
*/
|
|
16
|
+
export declare function useInviteMember(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, InviteMemberInput, unknown>;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useInviteMember/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAI7D,yCAAyC;AACzC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,eAAe,qIAE9B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MemberList } from '../../types/member';
|
|
2
|
+
import { type MembersListParams } from '../../utils/membersKeys';
|
|
3
|
+
/**
|
|
4
|
+
* Page size the server applies when none is requested. Mirrors the server's
|
|
5
|
+
* `DEFAULT_PAGE_SIZE`; used only as a fallback for the page-count math before
|
|
6
|
+
* the first response lands.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_PAGE_SIZE = 10;
|
|
9
|
+
/**
|
|
10
|
+
* Fetches one page of members. `keepPreviousData` holds the current rows on
|
|
11
|
+
* screen while a new page or search resolves, so the table doesn't flash
|
|
12
|
+
* empty between pages. Disabled until the caller confirms `users:read`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useMembers(params: MembersListParams, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<MemberList>, Error>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useMembers/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG9E;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAuBpC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,UAAO,8EAOnE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ApiError } from '@ortha-cms/utils-admin';
|
|
2
|
+
/**
|
|
3
|
+
* Shared shell for the member mutations. Every member mutation normalizes its
|
|
4
|
+
* transport error to {@link ApiError} (so dialogs can branch on
|
|
5
|
+
* `HTTP_STATUS.CONFLICT`) and, by default, invalidates the whole members cache
|
|
6
|
+
* on success (an added/changed/removed row may land on any page). The one
|
|
7
|
+
* exception is "resend invite", which changes no list-visible field — it opts
|
|
8
|
+
* out with `invalidate: false`. Each hook is then just its request function.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useMembersMutation<TInput, TResult>(mutationFn: (input: TInput) => Promise<TResult>, { invalidate }?: {
|
|
11
|
+
invalidate?: boolean;
|
|
12
|
+
}): import("@tanstack/react-query").UseMutationResult<TResult, ApiError, TInput, unknown>;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useMembersMutation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC/C,EAAE,UAAiB,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,yFAevD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ApiError } from '@ortha-cms/utils-admin';
|
|
2
|
+
/** Identifies the membership to remove: which member, which workspace. */
|
|
3
|
+
export type RemoveWorkspaceMemberInput = {
|
|
4
|
+
/** The member being removed. */
|
|
5
|
+
userId: string;
|
|
6
|
+
/** The workspace to remove them from. */
|
|
7
|
+
workspaceId: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Removes a member from a workspace from the Workspaces tab. Invalidates the
|
|
11
|
+
* member's detail (its `workspaces` list) and the members list (its Workspaces
|
|
12
|
+
* column) on success. Errors normalize to {@link ApiError}.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useRemoveWorkspaceMember(): import("@tanstack/react-query").UseMutationResult<void, ApiError, RemoveWorkspaceMemberInput, unknown>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useRemoveWorkspaceMember/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9E,0EAA0E;AAC1E,MAAM,MAAM,0BAA0B,GAAG;IACrC,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF;;;;GAIG;AACH,wBAAgB,wBAAwB,2GAcvC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Member } from '../../types/member';
|
|
2
|
+
/**
|
|
3
|
+
* Re-sends a pending member's invite (the server rotates the token,
|
|
4
|
+
* invalidating the previous link). No cache invalidation — the row itself is
|
|
5
|
+
* unchanged. Errors normalize to `ApiError`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useResendInvite(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, string, unknown>;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useResendInvite/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAYjD;;;;GAIG;AACH,wBAAgB,eAAe,0HAI9B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Revokes a pending invite — the row disappears from the list (the server
|
|
3
|
+
* deletes the placeholder account). Invalidates the members cache on
|
|
4
|
+
* success. Errors normalize to `ApiError`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useRevokeInvite(): import("@tanstack/react-query").UseMutationResult<void, import("@ortha-cms/utils-admin").ApiError, string, unknown>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useRevokeInvite/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,eAAe,wHAE9B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ApiError } from '@ortha-cms/utils-admin';
|
|
2
|
+
/** Identifies the session to revoke: whose, and which. */
|
|
3
|
+
export type RevokeSessionInput = {
|
|
4
|
+
/** The member who owns the session. */
|
|
5
|
+
userId: string;
|
|
6
|
+
/** The session row id to revoke. */
|
|
7
|
+
sessionId: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Revokes a member's session from the Sessions tab. Invalidates that member's
|
|
11
|
+
* sessions query on success so the revoked row drops off. Errors normalize to
|
|
12
|
+
* {@link ApiError}.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useRevokeSession(): import("@tanstack/react-query").UseMutationResult<void, ApiError, RevokeSessionInput, unknown>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useRevokeSession/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9E,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAUF;;;;GAIG;AACH,wBAAgB,gBAAgB,mGAa/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Member } from '../../types/member';
|
|
2
|
+
/** Input for {@link useSetMemberStatus}: who, and which way to flip. */
|
|
3
|
+
export type SetMemberStatusInput = {
|
|
4
|
+
/** The member to update. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** `true` disables the account, `false` re-enables it. */
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Disables or re-enables a member's account from the row menu. One hook for
|
|
11
|
+
* the pair — the menu renders exactly one of the two actions per row, and
|
|
12
|
+
* both invalidate the same cache. Errors normalize to `ApiError`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useSetMemberStatus(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, SetMemberStatusInput, unknown>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useSetMemberStatus/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD,wEAAwE;AACxE,MAAM,MAAM,oBAAoB,GAAG;IAC/B,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAkBF;;;;GAIG;AACH,wBAAgB,kBAAkB,wIAIjC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Member, MemberRole } from '../../types/member';
|
|
2
|
+
/** A partial member edit; omitted fields are left unchanged. */
|
|
3
|
+
export type UpdateMemberInput = {
|
|
4
|
+
id: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
role?: MemberRole;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Edits a member's name and/or role (the inline role select and the Edit
|
|
10
|
+
* dialog both submit through here). Errors normalize to `ApiError` —
|
|
11
|
+
* `HTTP_STATUS.CONFLICT` means the last-admin guardrail (or the self-role
|
|
12
|
+
* guard) rejected the change. Invalidates the members cache on success.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useUpdateMember(): import("@tanstack/react-query").UseMutationResult<Member, import("@ortha-cms/utils-admin").ApiError, UpdateMemberInput, unknown>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useUpdateMember/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAI7D,gEAAgE;AAChE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAYF;;;;;GAKG;AACH,wBAAgB,eAAe,qIAE9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Member } from '../../types/member';
|
|
2
|
+
/**
|
|
3
|
+
* Fetches a single member for the user detail page. The result is shared with
|
|
4
|
+
* every tab via the route's Outlet context, so the tabs never re-fetch. A 404
|
|
5
|
+
* (unknown/deleted member) surfaces as the query's error so the layout can show
|
|
6
|
+
* a not-found state. Disabled until the caller confirms `users:read`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useUserDetail(id: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<Member>, Error>;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useUserDetail/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAkBjD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAO,0EAMvD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** A live session as the detail page's Sessions tab renders it. */
|
|
2
|
+
export type UserSession = {
|
|
3
|
+
/** Revocation handle (the session row id). */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Originating `User-Agent`, or `null` if it was never captured. */
|
|
6
|
+
userAgent: string | null;
|
|
7
|
+
/** Originating IP, or `null` if it was never captured. */
|
|
8
|
+
ipAddress: string | null;
|
|
9
|
+
/** When the session was opened. */
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
/** Last authenticated request seen on this session. */
|
|
12
|
+
lastSeenAt: Date;
|
|
13
|
+
/** Absolute expiry. */
|
|
14
|
+
expiresAt: Date;
|
|
15
|
+
/** Whether this is the viewer's own session (never revocable from here). */
|
|
16
|
+
current: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Fetches the live sessions for a member (the Sessions tab). `staleTime: 0` so
|
|
20
|
+
* a session that has since expired or been revoked elsewhere drops off on the
|
|
21
|
+
* next mount/refocus rather than lingering. Gated on `users:update` (the tab
|
|
22
|
+
* is only shown to admins who can act on what they see).
|
|
23
|
+
*/
|
|
24
|
+
export declare function useUserSessions(id: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<UserSession[]>, Error>;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useUserSessions/index.ts"],"names":[],"mappings":"AAIA,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG;IACtB,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mCAAmC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,uDAAuD;IACvD,UAAU,EAAE,IAAI,CAAC;IACjB,uBAAuB;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAkCF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAO,iFAOzD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AvatarColor } from '@ortha-cms/design-system';
|
|
2
|
+
/** A workspace as the invite wizard's assignment step renders it. */
|
|
3
|
+
export type WorkspaceOption = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string | null;
|
|
7
|
+
initials: string;
|
|
8
|
+
color: AvatarColor;
|
|
9
|
+
};
|
|
10
|
+
/** Query key for the workspace options list. */
|
|
11
|
+
export declare const workspaceOptionsKey: readonly ["workspaces", "options"];
|
|
12
|
+
/**
|
|
13
|
+
* Lists every workspace (via the shared `GET /api/workspaces`) for the invite
|
|
14
|
+
* wizard's "assign workspaces" step. `enabled` defers the fetch until the step
|
|
15
|
+
* is reached.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useWorkspaceOptions(enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<WorkspaceOption[]>, Error>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/useWorkspaceOptions/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,qEAAqE;AACrE,MAAM,MAAM,eAAe,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;CACtB,CAAC;AAUF,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,oCAAqC,CAAC;AAkBtE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,UAAO,qFAOjD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ApiError } from '@orthacms/utils-admin';
|
|
2
|
+
import type { AddWorkspaceMemberInput } from '../../infrastructure/memberGateway';
|
|
3
|
+
export type { AddWorkspaceMemberInput } from '../../infrastructure/memberGateway';
|
|
4
|
+
/**
|
|
5
|
+
* Adds a member to a workspace from the Workspaces tab via the gateway. The
|
|
6
|
+
* endpoint is idempotent (re-adding is a no-op). Invalidates the member's detail
|
|
7
|
+
* (its `workspaces` list) and the members list (its Workspaces column) on
|
|
8
|
+
* success. Errors normalize to {@link ApiError}.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useAddWorkspaceMember(): import("@tanstack/react-query").UseMutationResult<void, ApiError, AddWorkspaceMemberInput, unknown>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useAddWorkspaceMember/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF,YAAY,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;;;GAKG;AACH,wBAAgB,qBAAqB,wGAWpC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
|
|
3
|
+
import { membersKeys } from '../../infrastructure/membersKeys';
|
|
4
|
+
/**
|
|
5
|
+
* Adds a member to a workspace from the Workspaces tab via the gateway. The
|
|
6
|
+
* endpoint is idempotent (re-adding is a no-op). Invalidates the member's detail
|
|
7
|
+
* (its `workspaces` list) and the members list (its Workspaces column) on
|
|
8
|
+
* success. Errors normalize to {@link ApiError}.
|
|
9
|
+
*/
|
|
10
|
+
export function useAddWorkspaceMember() {
|
|
11
|
+
const queryClient = useQueryClient();
|
|
12
|
+
return useMutation({
|
|
13
|
+
mutationFn: (input) => httpMemberGateway.addWorkspace(input),
|
|
14
|
+
onSuccess: (_data, { userId }) => {
|
|
15
|
+
queryClient.invalidateQueries({
|
|
16
|
+
queryKey: membersKeys.detail(userId)
|
|
17
|
+
});
|
|
18
|
+
queryClient.invalidateQueries({ queryKey: membersKeys.all });
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InvitedMember } from '../../domain/types/member';
|
|
2
|
+
import type { InviteMemberInput } from '../../infrastructure/memberGateway';
|
|
3
|
+
export type { InviteMemberInput } from '../../infrastructure/memberGateway';
|
|
4
|
+
/**
|
|
5
|
+
* Invites a person by email via the gateway, resolving with the new member and
|
|
6
|
+
* their one-time invite token (the admin's only chance to capture the link).
|
|
7
|
+
* Errors are normalized to `ApiError` so the invite flow can branch on
|
|
8
|
+
* `HTTP_STATUS.CONFLICT` (email already taken); every page of the members cache
|
|
9
|
+
* is refreshed on success — the new "Invited" row may land on any page.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useInviteMember(): import("@tanstack/react-query").UseMutationResult<InvitedMember, import("@orthacms/utils-admin").ApiError, InviteMemberInput, unknown>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useInviteMember/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAG5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,eAAe,2IAI9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
|
|
2
|
+
import { useMembersMutation } from '../useMembersMutation';
|
|
3
|
+
/**
|
|
4
|
+
* Invites a person by email via the gateway, resolving with the new member and
|
|
5
|
+
* their one-time invite token (the admin's only chance to capture the link).
|
|
6
|
+
* Errors are normalized to `ApiError` so the invite flow can branch on
|
|
7
|
+
* `HTTP_STATUS.CONFLICT` (email already taken); every page of the members cache
|
|
8
|
+
* is refreshed on success — the new "Invited" row may land on any page.
|
|
9
|
+
*/
|
|
10
|
+
export function useInviteMember() {
|
|
11
|
+
return useMembersMutation((input) => httpMemberGateway.invite(input));
|
|
12
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { MemberRole } from '../../domain/types/member';
|
|
2
|
+
/** The fields the invite wizard collects, before the final guard + submit. */
|
|
3
|
+
export type InviteMemberDraft = {
|
|
4
|
+
/** The invitee's email (trimmed by the flow). */
|
|
5
|
+
email: string;
|
|
6
|
+
/** The global role granted on acceptance. */
|
|
7
|
+
role: MemberRole;
|
|
8
|
+
/** Optional display name (blank becomes omitted). */
|
|
9
|
+
name?: string;
|
|
10
|
+
/** Workspaces to grant access to; `all` is expanded to ids by the caller. */
|
|
11
|
+
workspaceIds: string[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Why the last submission failed, as a machine key the page maps to its inline
|
|
15
|
+
* alert copy: `taken` (email already exists — `409`) or `failed` (anything
|
|
16
|
+
* else).
|
|
17
|
+
*/
|
|
18
|
+
export type InviteErrorReason = 'taken' | 'failed';
|
|
19
|
+
/** A completed invite, and the link the admin now has to deliver. */
|
|
20
|
+
export type SentInvite = {
|
|
21
|
+
/** The invitee's email, as accepted by the server. */
|
|
22
|
+
email: string;
|
|
23
|
+
/** The full invite link, built from the one-time token. */
|
|
24
|
+
link: string;
|
|
25
|
+
};
|
|
26
|
+
/** What {@link useInviteMemberFlow} returns. */
|
|
27
|
+
export type InviteMemberFlow = {
|
|
28
|
+
/**
|
|
29
|
+
* Runs the invite use case: guards the email through the {@link Email} value
|
|
30
|
+
* object, POSTs via the invite mutation (cache invalidation), then records
|
|
31
|
+
* the resulting link in {@link sent}. Rejections are swallowed — the caller
|
|
32
|
+
* reads {@link errorReason} to render the inline alert and let the user
|
|
33
|
+
* retry.
|
|
34
|
+
*/
|
|
35
|
+
submit: (draft: InviteMemberDraft) => Promise<void>;
|
|
36
|
+
/** Whether an invite is currently in flight. */
|
|
37
|
+
submitting: boolean;
|
|
38
|
+
/** Why the last submission failed, or `null` when it hasn't. */
|
|
39
|
+
errorReason: InviteErrorReason | null;
|
|
40
|
+
/**
|
|
41
|
+
* The invite that was just sent, or `null` while the wizard is still
|
|
42
|
+
* collecting. Set once, and never re-fetchable — the server returns the raw
|
|
43
|
+
* token exactly once, so this state is the only copy.
|
|
44
|
+
*/
|
|
45
|
+
sent: SentInvite | null;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The invite-member use-case hook. Orchestrates the wizard's submission — Email
|
|
49
|
+
* VO validation → invite → the shareable link — so the invite page stays layout
|
|
50
|
+
* + fields and owns none of the flow. The step's continue gate already blocks a
|
|
51
|
+
* malformed email; the {@link Email} guard here is the last check before the
|
|
52
|
+
* request.
|
|
53
|
+
*
|
|
54
|
+
* It deliberately does **not** navigate away on success: nothing emails the
|
|
55
|
+
* invite yet, so leaving the page would throw away the only copy of the link.
|
|
56
|
+
* The page shows it instead, and the admin leaves when they are done with it.
|
|
57
|
+
*/
|
|
58
|
+
export declare function useInviteMemberFlow(): InviteMemberFlow;
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useInviteMemberFlow/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG;IAC5B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG;IACrB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC;;;;OAIG;IACH,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAoCtD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
import { HTTP_STATUS } from '@orthacms/utils-admin';
|
|
3
|
+
import { Email } from '../../domain/value-objects/email';
|
|
4
|
+
import { inviteLinkFor } from '../../infrastructure/inviteLink';
|
|
5
|
+
import { useInviteMember } from '../useInviteMember';
|
|
6
|
+
/**
|
|
7
|
+
* The invite-member use-case hook. Orchestrates the wizard's submission — Email
|
|
8
|
+
* VO validation → invite → the shareable link — so the invite page stays layout
|
|
9
|
+
* + fields and owns none of the flow. The step's continue gate already blocks a
|
|
10
|
+
* malformed email; the {@link Email} guard here is the last check before the
|
|
11
|
+
* request.
|
|
12
|
+
*
|
|
13
|
+
* It deliberately does **not** navigate away on success: nothing emails the
|
|
14
|
+
* invite yet, so leaving the page would throw away the only copy of the link.
|
|
15
|
+
* The page shows it instead, and the admin leaves when they are done with it.
|
|
16
|
+
*/
|
|
17
|
+
export function useInviteMemberFlow() {
|
|
18
|
+
const invite = useInviteMember();
|
|
19
|
+
const [sent, setSent] = useState(null);
|
|
20
|
+
const submit = useCallback(async (draft) => {
|
|
21
|
+
const email = draft.email.trim();
|
|
22
|
+
try {
|
|
23
|
+
// Guard the shape through the domain VO before hitting the API.
|
|
24
|
+
Email.create(email);
|
|
25
|
+
const created = await invite.mutateAsync({
|
|
26
|
+
email,
|
|
27
|
+
role: draft.role,
|
|
28
|
+
name: draft.name?.trim() || undefined,
|
|
29
|
+
workspaceIds: draft.workspaceIds
|
|
30
|
+
});
|
|
31
|
+
setSent({
|
|
32
|
+
email: created.email,
|
|
33
|
+
link: inviteLinkFor(created.inviteToken)
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// The page's inline alert (via `errorReason`) explains; the user
|
|
38
|
+
// can go back, fix the email, and retry.
|
|
39
|
+
}
|
|
40
|
+
}, [invite]);
|
|
41
|
+
const errorReason = invite.isError
|
|
42
|
+
? invite.error.status === HTTP_STATUS.CONFLICT
|
|
43
|
+
? 'taken'
|
|
44
|
+
: 'failed'
|
|
45
|
+
: null;
|
|
46
|
+
return { submit, submitting: invite.isPending, errorReason, sent };
|
|
47
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MemberWithResetToken } from '../../domain/types/member';
|
|
2
|
+
/**
|
|
3
|
+
* Mints a one-time password-reset link for a member via the gateway (the server
|
|
4
|
+
* rotates the token, invalidating any previous link). Resolves with the member
|
|
5
|
+
* **and** the raw token, so the caller can show the link — minting without
|
|
6
|
+
* handing the link over would leave the member with nothing and the admin with
|
|
7
|
+
* a dead one. No cache invalidation: no list-visible field changes, exactly
|
|
8
|
+
* like "resend invite". Errors normalize to `ApiError`, so a caller can branch
|
|
9
|
+
* on `HTTP_STATUS.CONFLICT` for "not active" / "just issued".
|
|
10
|
+
*/
|
|
11
|
+
export declare function useIssuePasswordReset(): import("@tanstack/react-query").UseMutationResult<MemberWithResetToken, import("@orthacms/utils-admin").ApiError, string, unknown>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useIssuePasswordReset/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAItE;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,uIAKpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
|
|
2
|
+
import { useMembersMutation } from '../useMembersMutation';
|
|
3
|
+
/**
|
|
4
|
+
* Mints a one-time password-reset link for a member via the gateway (the server
|
|
5
|
+
* rotates the token, invalidating any previous link). Resolves with the member
|
|
6
|
+
* **and** the raw token, so the caller can show the link — minting without
|
|
7
|
+
* handing the link over would leave the member with nothing and the admin with
|
|
8
|
+
* a dead one. No cache invalidation: no list-visible field changes, exactly
|
|
9
|
+
* like "resend invite". Errors normalize to `ApiError`, so a caller can branch
|
|
10
|
+
* on `HTTP_STATUS.CONFLICT` for "not active" / "just issued".
|
|
11
|
+
*/
|
|
12
|
+
export function useIssuePasswordReset() {
|
|
13
|
+
return useMembersMutation((id) => httpMemberGateway.issuePasswordReset(id), { invalidate: false });
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type MembersListParams } from '../../infrastructure/membersKeys';
|
|
2
|
+
/**
|
|
3
|
+
* Page size the server applies when none is requested. Mirrors the server's
|
|
4
|
+
* `DEFAULT_PAGE_SIZE`; used only as a fallback for the page-count math before
|
|
5
|
+
* the first response lands.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_PAGE_SIZE = 10;
|
|
8
|
+
/**
|
|
9
|
+
* Fetches one page of members via the member gateway. `keepPreviousData` holds
|
|
10
|
+
* the current rows on screen while a new page or search resolves, so the table
|
|
11
|
+
* doesn't flash empty between pages. Disabled until the caller confirms
|
|
12
|
+
* `users:read`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useMembers(params: MembersListParams, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<import("../../..").MemberList>, Error>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useMembers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,kCAAkC,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,UAAO,iGAOnE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { keepPreviousData, useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { httpMemberGateway } from '../../infrastructure/httpMemberGateway';
|
|
3
|
+
import { membersKeys } from '../../infrastructure/membersKeys';
|
|
4
|
+
/**
|
|
5
|
+
* Page size the server applies when none is requested. Mirrors the server's
|
|
6
|
+
* `DEFAULT_PAGE_SIZE`; used only as a fallback for the page-count math before
|
|
7
|
+
* the first response lands.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_PAGE_SIZE = 10;
|
|
10
|
+
/**
|
|
11
|
+
* Fetches one page of members via the member gateway. `keepPreviousData` holds
|
|
12
|
+
* the current rows on screen while a new page or search resolves, so the table
|
|
13
|
+
* doesn't flash empty between pages. Disabled until the caller confirms
|
|
14
|
+
* `users:read`.
|
|
15
|
+
*/
|
|
16
|
+
export function useMembers(params, enabled = true) {
|
|
17
|
+
return useQuery({
|
|
18
|
+
queryKey: membersKeys.list(params),
|
|
19
|
+
queryFn: () => httpMemberGateway.list(params),
|
|
20
|
+
placeholderData: keepPreviousData,
|
|
21
|
+
enabled
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ApiError } from '@orthacms/utils-admin';
|
|
2
|
+
/**
|
|
3
|
+
* Shared shell for the member mutations. The gateway already normalizes its
|
|
4
|
+
* transport error to {@link ApiError} (so dialogs can branch on
|
|
5
|
+
* `HTTP_STATUS.CONFLICT`); this re-normalizes defensively and, by default,
|
|
6
|
+
* invalidates the whole members cache on success (an added/changed/removed row
|
|
7
|
+
* may land on any page). The one exception is "resend invite", which changes no
|
|
8
|
+
* list-visible field — it opts out with `invalidate: false`. Each hook is then
|
|
9
|
+
* just its gateway call.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useMembersMutation<TInput, TResult>(mutationFn: (input: TInput) => Promise<TResult>, { invalidate }?: {
|
|
12
|
+
invalidate?: boolean;
|
|
13
|
+
}): import("@tanstack/react-query").UseMutationResult<TResult, ApiError, TInput, unknown>;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/useMembersMutation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGlE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC/C,EAAE,UAAiB,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,yFAevD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { toApiError } from '@orthacms/utils-admin';
|
|
3
|
+
import { membersKeys } from '../../infrastructure/membersKeys';
|
|
4
|
+
/**
|
|
5
|
+
* Shared shell for the member mutations. The gateway already normalizes its
|
|
6
|
+
* transport error to {@link ApiError} (so dialogs can branch on
|
|
7
|
+
* `HTTP_STATUS.CONFLICT`); this re-normalizes defensively and, by default,
|
|
8
|
+
* invalidates the whole members cache on success (an added/changed/removed row
|
|
9
|
+
* may land on any page). The one exception is "resend invite", which changes no
|
|
10
|
+
* list-visible field — it opts out with `invalidate: false`. Each hook is then
|
|
11
|
+
* just its gateway call.
|
|
12
|
+
*/
|
|
13
|
+
export function useMembersMutation(mutationFn, { invalidate = true } = {}) {
|
|
14
|
+
const queryClient = useQueryClient();
|
|
15
|
+
return useMutation({
|
|
16
|
+
mutationFn: (input) => mutationFn(input).catch((error) => {
|
|
17
|
+
throw toApiError(error);
|
|
18
|
+
}),
|
|
19
|
+
onSuccess: invalidate
|
|
20
|
+
? () => {
|
|
21
|
+
queryClient.invalidateQueries({ queryKey: membersKeys.all });
|
|
22
|
+
}
|
|
23
|
+
: undefined
|
|
24
|
+
});
|
|
25
|
+
}
|