@burdenoff/microfe-organization 2026.510.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/generated/global-operations.d.ts +1647 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-operations.js +724 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.d.ts +20716 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/global-types.js +8 -0
- package/dist/generated/global-types.js.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +53363 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/node_modules/sonner/dist/index.js +163 -0
- package/dist/node_modules/sonner/dist/index.js.map +1 -0
- package/dist/node_modules/zod/v3/ZodError.js +82 -0
- package/dist/node_modules/zod/v3/ZodError.js.map +1 -0
- package/dist/node_modules/zod/v3/errors.js +10 -0
- package/dist/node_modules/zod/v3/errors.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js +9 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js +93 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/util.js +76 -0
- package/dist/node_modules/zod/v3/helpers/util.js.map +1 -0
- package/dist/node_modules/zod/v3/locales/en.js +62 -0
- package/dist/node_modules/zod/v3/locales/en.js.map +1 -0
- package/dist/node_modules/zod/v3/types.js +2441 -0
- package/dist/node_modules/zod/v3/types.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.d.ts +16 -0
- package/dist/organization-management/AdminOrganizationRoot.d.ts.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.js +76 -0
- package/dist/organization-management/AdminOrganizationRoot.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoutes.d.ts +16 -0
- package/dist/organization-management/AdminOrganizationRoutes.d.ts.map +1 -0
- package/dist/organization-management/AdminOrganizationRoutes.js +73 -0
- package/dist/organization-management/AdminOrganizationRoutes.js.map +1 -0
- package/dist/organization-management/UserOrganizationRoot.d.ts +17 -0
- package/dist/organization-management/UserOrganizationRoot.d.ts.map +1 -0
- package/dist/organization-management/UserOrganizationRoot.js +45 -0
- package/dist/organization-management/UserOrganizationRoot.js.map +1 -0
- package/dist/organization-management/UserOrganizationRoutes.d.ts +12 -0
- package/dist/organization-management/UserOrganizationRoutes.d.ts.map +1 -0
- package/dist/organization-management/UserOrganizationRoutes.js +30 -0
- package/dist/organization-management/UserOrganizationRoutes.js.map +1 -0
- package/dist/organization-management/constants/permissions.d.ts +30 -0
- package/dist/organization-management/constants/permissions.d.ts.map +1 -0
- package/dist/organization-management/constants/permissions.js +22 -0
- package/dist/organization-management/constants/permissions.js.map +1 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts +19 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts.map +1 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js +15 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js.map +1 -0
- package/dist/organization-management/hooks/useOrganizationPageView.d.ts +11 -0
- package/dist/organization-management/hooks/useOrganizationPageView.d.ts.map +1 -0
- package/dist/organization-management/hooks/useOrganizationPageView.js +24 -0
- package/dist/organization-management/hooks/useOrganizationPageView.js.map +1 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts +18 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.js +119 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts +6 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js +51 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts +11 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js +56 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js.map +1 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.d.ts +22 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.js +70 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts +6 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.js +141 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -0
- package/dist/organization-management/modules/members/hooks/useInvites.d.ts +75 -0
- package/dist/organization-management/modules/members/hooks/useInvites.d.ts.map +1 -0
- package/dist/organization-management/modules/members/hooks/useInvites.js +253 -0
- package/dist/organization-management/modules/members/hooks/useInvites.js.map +1 -0
- package/dist/organization-management/modules/members/hooks/useMembers.d.ts +84 -0
- package/dist/organization-management/modules/members/hooks/useMembers.d.ts.map +1 -0
- package/dist/organization-management/modules/members/hooks/useMembers.js +95 -0
- package/dist/organization-management/modules/members/hooks/useMembers.js.map +1 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js +91 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +115 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.d.ts +2 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.js +424 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +114 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -0
- package/dist/organization-management/modules/members/types/index.d.ts +35 -0
- package/dist/organization-management/modules/members/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts +13 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js +325 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts +13 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +49 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts +86 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js +164 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts +6 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +76 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts +2 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +306 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts +6 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +93 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts +2 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +448 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/schemas/index.d.ts +53 -0
- package/dist/organization-management/modules/organizations/schemas/index.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/schemas/index.js +25 -0
- package/dist/organization-management/modules/organizations/schemas/index.js.map +1 -0
- package/dist/organization-management/modules/organizations/types/index.d.ts +34 -0
- package/dist/organization-management/modules/organizations/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts +13 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js +147 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts +16 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +107 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts +16 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +386 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts +13 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +49 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts +47 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js +46 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts +133 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js +111 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +82 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +438 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +90 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +465 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/schemas/index.d.ts +44 -0
- package/dist/organization-management/modules/workspaces/schemas/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/schemas/index.js +22 -0
- package/dist/organization-management/modules/workspaces/schemas/index.js.map +1 -0
- package/dist/organization-management/modules/workspaces/types/index.d.ts +39 -0
- package/dist/organization-management/modules/workspaces/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts +48 -0
- package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts.map +1 -0
- package/dist/organization-management/providers/OrgConsoleProvider.d.ts +19 -0
- package/dist/organization-management/providers/OrgConsoleProvider.d.ts.map +1 -0
- package/dist/organization-management/providers/OrgConsoleProvider.js +24 -0
- package/dist/organization-management/providers/OrgConsoleProvider.js.map +1 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts +28 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js +105 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.d.ts +14 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.js +30 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.d.ts +11 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.js +37 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.d.ts +6 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.js +24 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -0
- package/dist/organization-management/shared/components/input/SearchInput.d.ts +15 -0
- package/dist/organization-management/shared/components/input/SearchInput.d.ts.map +1 -0
- package/dist/organization-management/shared/components/input/SearchInput.js +40 -0
- package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts +10 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts.map +1 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js +21 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js.map +1 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts +2 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts.map +1 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.js +17 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.js.map +1 -0
- package/dist/organization-management/shared/hooks/useTr.d.ts +14 -0
- package/dist/organization-management/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/organization-management/shared/hooks/useTr.js +14 -0
- package/dist/organization-management/shared/hooks/useTr.js.map +1 -0
- package/dist/organization-management/shared/logger.d.ts +11 -0
- package/dist/organization-management/shared/logger.d.ts.map +1 -0
- package/dist/organization-management/shared/logger.js +46 -0
- package/dist/organization-management/shared/logger.js.map +1 -0
- package/dist/organization-management/shared/recaptcha.d.ts +2 -0
- package/dist/organization-management/shared/recaptcha.d.ts.map +1 -0
- package/dist/organization-management/shared/recaptcha.js +6 -0
- package/dist/organization-management/shared/recaptcha.js.map +1 -0
- package/dist/organization-management/shared/types/graphql.d.ts +131 -0
- package/dist/organization-management/shared/types/graphql.d.ts.map +1 -0
- package/dist/organization-management/shared/types/graphql.js +10 -0
- package/dist/organization-management/shared/types/graphql.js.map +1 -0
- package/dist/organization-management/shared/utils/cn.d.ts +8 -0
- package/dist/organization-management/shared/utils/cn.d.ts.map +1 -0
- package/dist/organization-management/types/index.d.ts +46 -0
- package/dist/organization-management/types/index.d.ts.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +116 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
|
|
2
|
+
import { useTr as t } from "../../../shared/hooks/useTr.js";
|
|
3
|
+
import { LoadingState as n } from "../../../shared/components/feedback/LoadingState.js";
|
|
4
|
+
import { ErrorState as r } from "../../../shared/components/feedback/ErrorState.js";
|
|
5
|
+
import { PERMISSIONS as i } from "../../../constants/permissions.js";
|
|
6
|
+
import { MemberRoleBadge as a } from "../components/MemberRoleBadge.js";
|
|
7
|
+
import { useMember as o } from "../hooks/useMembers.js";
|
|
8
|
+
import { ArrowLeft as s, Shield as c } from "lucide-react";
|
|
9
|
+
import { usePermissions as l } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
10
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
11
|
+
import { useParams as f } from "react-router-dom";
|
|
12
|
+
//#region src/organization-management/modules/members/pages/MemberDetailPage.tsx
|
|
13
|
+
function p() {
|
|
14
|
+
let p = t(), { organizationId: m, userId: h } = f(), { navigate: g, basePath: _ = "/organizations" } = e(), { hasPermission: v, isLoading: y } = l(), { member: b, loading: x, error: S } = o(m, h);
|
|
15
|
+
return y ? /* @__PURE__ */ u("div", {
|
|
16
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
17
|
+
children: /* @__PURE__ */ u(n, { message: p("common.loadingPermissions", "Loading permissions...") })
|
|
18
|
+
}) : v(i.MEMBER_READ) ? x ? /* @__PURE__ */ u("div", {
|
|
19
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
20
|
+
children: /* @__PURE__ */ u(n, { message: p("members.detail.loading", "Loading member...") })
|
|
21
|
+
}) : S || !b ? /* @__PURE__ */ u("div", {
|
|
22
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
23
|
+
children: /* @__PURE__ */ u(r, {
|
|
24
|
+
message: S?.message || p("members.detail.notFound", "Member not found"),
|
|
25
|
+
action: {
|
|
26
|
+
label: p("common.goBack", "Go Back"),
|
|
27
|
+
onClick: () => g(`${_}/${m}/members`)
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
}) : /* @__PURE__ */ d("div", {
|
|
31
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
|
|
32
|
+
children: [/* @__PURE__ */ d("div", {
|
|
33
|
+
className: "mb-6",
|
|
34
|
+
children: [/* @__PURE__ */ d("button", {
|
|
35
|
+
onClick: () => g(`${_}/${m}/members`),
|
|
36
|
+
className: "inline-flex items-center gap-2 text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] active:scale-[0.98] transition-all duration-200 mb-4",
|
|
37
|
+
children: [/* @__PURE__ */ u(s, { size: 20 }), p("members.detail.backToMembers", "Back to Members")]
|
|
38
|
+
}), /* @__PURE__ */ d("div", {
|
|
39
|
+
className: "flex items-start gap-4",
|
|
40
|
+
children: [/* @__PURE__ */ u("div", {
|
|
41
|
+
className: "w-16 h-16 rounded-full bg-[var(--color-status-info-muted)] flex items-center justify-center",
|
|
42
|
+
children: /* @__PURE__ */ u(c, {
|
|
43
|
+
size: 32,
|
|
44
|
+
className: "text-[var(--color-status-info)]"
|
|
45
|
+
})
|
|
46
|
+
}), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
|
|
47
|
+
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
48
|
+
children: b.userId
|
|
49
|
+
}), /* @__PURE__ */ d("p", {
|
|
50
|
+
className: "text-[var(--color-text-secondary)] mt-1",
|
|
51
|
+
children: [
|
|
52
|
+
p("members.list.memberId", "Member ID"),
|
|
53
|
+
": ",
|
|
54
|
+
b.id
|
|
55
|
+
]
|
|
56
|
+
})] })]
|
|
57
|
+
})]
|
|
58
|
+
}), /* @__PURE__ */ d("div", {
|
|
59
|
+
className: "bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6",
|
|
60
|
+
children: [/* @__PURE__ */ u("h2", {
|
|
61
|
+
className: "text-lg font-semibold text-[var(--color-text-primary)] mb-4",
|
|
62
|
+
children: p("members.detail.info", "Member Information")
|
|
63
|
+
}), /* @__PURE__ */ d("div", {
|
|
64
|
+
className: "space-y-4",
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
|
|
67
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
68
|
+
children: p("members.detail.userId", "User ID")
|
|
69
|
+
}), /* @__PURE__ */ u("p", {
|
|
70
|
+
className: "text-[var(--color-text-primary)] font-medium",
|
|
71
|
+
children: b.userId
|
|
72
|
+
})] }),
|
|
73
|
+
/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
|
|
74
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
75
|
+
children: p("members.detail.orgId", "Organization ID")
|
|
76
|
+
}), /* @__PURE__ */ u("p", {
|
|
77
|
+
className: "text-[var(--color-text-primary)] font-medium",
|
|
78
|
+
children: b.organizationId
|
|
79
|
+
})] }),
|
|
80
|
+
/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
|
|
81
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
82
|
+
children: p("members.list.column.role", "Role")
|
|
83
|
+
}), /* @__PURE__ */ u("div", {
|
|
84
|
+
className: "mt-1",
|
|
85
|
+
children: /* @__PURE__ */ u(a, { role: b.role })
|
|
86
|
+
})] }),
|
|
87
|
+
b.invitedBy && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
|
|
88
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
89
|
+
children: p("members.detail.invitedBy", "Invited By")
|
|
90
|
+
}), /* @__PURE__ */ u("p", {
|
|
91
|
+
className: "text-[var(--color-text-primary)] font-medium",
|
|
92
|
+
children: b.invitedBy
|
|
93
|
+
})] }),
|
|
94
|
+
b.joinedAt && /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
|
|
95
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
96
|
+
children: p("members.detail.joinedAt", "Joined At")
|
|
97
|
+
}), /* @__PURE__ */ u("p", {
|
|
98
|
+
className: "text-[var(--color-text-primary)] font-medium",
|
|
99
|
+
children: new Date(b.joinedAt).toLocaleString()
|
|
100
|
+
})] })
|
|
101
|
+
]
|
|
102
|
+
})]
|
|
103
|
+
})]
|
|
104
|
+
}) : /* @__PURE__ */ u("div", {
|
|
105
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
106
|
+
children: /* @__PURE__ */ u("div", {
|
|
107
|
+
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
108
|
+
children: p("members.detail.noPermission", "You don't have permission to view member details.")
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
export { p as MemberDetailPage };
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=MemberDetailPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemberDetailPage.js","names":[],"sources":["../../../../../src/organization-management/modules/members/pages/MemberDetailPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { ArrowLeft, Shield } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useMember } from '../hooks/useMembers';\nimport { MemberRoleBadge } from '../components/MemberRoleBadge';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { ErrorState } from '../../../shared/components/feedback/ErrorState';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\n\n/**\n * Member Detail Page\n * Simplified version showing available member fields\n */\nexport function MemberDetailPage() {\n const tr = useTr();\n const { organizationId, userId } = useParams<{ organizationId: string; userId: string }>();\n const { navigate, basePath = '/organizations' } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { member, loading, error } = useMember(organizationId!, userId!);\n\n if (permissionsLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <LoadingState message={tr('common.loadingPermissions', 'Loading permissions...')} />\n </div>\n );\n }\n\n if (!hasPermission(PERMISSIONS.MEMBER_READ)) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <div className=\"p-8 text-center text-[var(--color-text-secondary)]\">\n {tr('members.detail.noPermission', \"You don't have permission to view member details.\")}\n </div>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <LoadingState message={tr('members.detail.loading', 'Loading member...')} />\n </div>\n );\n }\n\n if (error || !member) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <ErrorState\n message={error?.message || tr('members.detail.notFound', 'Member not found')}\n action={{\n label: tr('common.goBack', 'Go Back'),\n onClick: () => navigate(`${basePath}/${organizationId}/members`),\n }}\n />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300\">\n {/* Header */}\n <div className=\"mb-6\">\n <button\n onClick={() => navigate(`${basePath}/${organizationId}/members`)}\n className=\"inline-flex items-center gap-2 text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] active:scale-[0.98] transition-all duration-200 mb-4\"\n >\n <ArrowLeft size={20} />\n {tr('members.detail.backToMembers', 'Back to Members')}\n </button>\n\n <div className=\"flex items-start gap-4\">\n <div className=\"w-16 h-16 rounded-full bg-[var(--color-status-info-muted)] flex items-center justify-center\">\n <Shield size={32} className=\"text-[var(--color-status-info)]\" />\n </div>\n <div>\n <h1 className=\"text-3xl font-bold text-[var(--color-text-primary)]\">{member.userId}</h1>\n <p className=\"text-[var(--color-text-secondary)] mt-1\">\n {tr('members.list.memberId', 'Member ID')}: {member.id}\n </p>\n </div>\n </div>\n </div>\n\n {/* Details */}\n <div className=\"bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-[var(--color-text-primary)] mb-4\">\n {tr('members.detail.info', 'Member Information')}\n </h2>\n\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.userId', 'User ID')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">{member.userId}</p>\n </div>\n\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.orgId', 'Organization ID')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">{member.organizationId}</p>\n </div>\n\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.list.column.role', 'Role')}\n </p>\n <div className=\"mt-1\">\n <MemberRoleBadge role={member.role} />\n </div>\n </div>\n\n {member.invitedBy && (\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.invitedBy', 'Invited By')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">{member.invitedBy}</p>\n </div>\n )}\n\n {member.joinedAt && (\n <div>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr('members.detail.joinedAt', 'Joined At')}\n </p>\n <p className=\"text-[var(--color-text-primary)] font-medium\">\n {new Date(member.joinedAt).toLocaleString()}\n </p>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAgB,IAAmB;CACjC,IAAM,IAAK,GAAO,EACZ,EAAE,mBAAgB,cAAW,GAAuD,EACpF,EAAE,aAAU,cAAW,qBAAqB,GAAe,EAC3D,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,EAAE,WAAQ,YAAS,aAAU,EAAU,GAAiB,EAAQ;AA0CtE,QAxCI,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,6BAA6B,yBAAyB,EAAI,CAAA;EAChF,CAAA,GAIL,EAAc,EAAY,YAAY,GAUvC,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,0BAA0B,oBAAoB,EAAI,CAAA;EACxE,CAAA,GAIN,KAAS,CAAC,IAEV,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,SAAS,GAAO,WAAW,EAAG,2BAA2B,mBAAmB;GAC5E,QAAQ;IACN,OAAO,EAAG,iBAAiB,UAAU;IACrC,eAAe,EAAS,GAAG,EAAS,GAAG,EAAe,UAAU;IACjE;GACD,CAAA;EACE,CAAA,GAKR,kBAAC,OAAD;EAAK,WAAU;YAAf,CAEE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,UAAD;IACE,eAAe,EAAS,GAAG,EAAS,GAAG,EAAe,UAAU;IAChE,WAAU;cAFZ,CAIE,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA,EACtB,EAAG,gCAAgC,kBAAkB,CAC/C;OAET,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MAAQ,MAAM;MAAI,WAAU;MAAoC,CAAA;KAC5D,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuD,EAAO;KAAY,CAAA,EACxF,kBAAC,KAAD;KAAG,WAAU;eAAb;MACG,EAAG,yBAAyB,YAAY;MAAC;MAAG,EAAO;MAClD;OACA,EAAA,CAAA,CACF;MACF;MAGN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAG,uBAAuB,qBAAqB;IAC7C,CAAA,EAEL,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,yBAAyB,UAAU;MACrC,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBAAgD,EAAO;MAAW,CAAA,CAC3E,EAAA,CAAA;KAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,wBAAwB,kBAAkB;MAC5C,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBAAgD,EAAO;MAAmB,CAAA,CACnF,EAAA,CAAA;KAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,4BAA4B,OAAO;MACrC,CAAA,EACJ,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD,EAAiB,MAAM,EAAO,MAAQ,CAAA;MAClC,CAAA,CACF,EAAA,CAAA;KAEL,EAAO,aACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,4BAA4B,aAAa;MAC3C,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBAAgD,EAAO;MAAc,CAAA,CAC9E,EAAA,CAAA;KAGP,EAAO,YACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,2BAA2B,YAAY;MACzC,CAAA,EACJ,kBAAC,KAAD;MAAG,WAAU;gBACV,IAAI,KAAK,EAAO,SAAS,CAAC,gBAAgB;MACzC,CAAA,CACA,EAAA,CAAA;KAEJ;MACF;KACF;MA1GJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAG,+BAA+B,oDAAoD;GACnF,CAAA;EACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembersListPage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/pages/MembersListPage.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,eAAe,4CAuf9B"}
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
|
|
2
|
+
import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
|
|
3
|
+
import { useTr as n } from "../../../shared/hooks/useTr.js";
|
|
4
|
+
import { SearchInput as r } from "../../../shared/components/input/SearchInput.js";
|
|
5
|
+
import { SelectionCheckbox as i } from "../../../shared/components/input/SelectionCheckbox.js";
|
|
6
|
+
import { LoadingState as a } from "../../../shared/components/feedback/LoadingState.js";
|
|
7
|
+
import { ErrorState as o } from "../../../shared/components/feedback/ErrorState.js";
|
|
8
|
+
import { EmptyState as s } from "../../../shared/components/feedback/EmptyState.js";
|
|
9
|
+
import { useDebouncedValue as c } from "../../../shared/hooks/useDebouncedValue.js";
|
|
10
|
+
import { useConfirmDialog as ee } from "../../../shared/components/dialog/ConfirmDialog.js";
|
|
11
|
+
import { PERMISSIONS as l } from "../../../constants/permissions.js";
|
|
12
|
+
import { MemberRoleBadge as u } from "../components/MemberRoleBadge.js";
|
|
13
|
+
import { useMembers as d, useRemoveMember as f } from "../hooks/useMembers.js";
|
|
14
|
+
import { useEffect as te, useMemo as p, useState as m } from "react";
|
|
15
|
+
import { Eye as h, Mail as g, RefreshCw as _, Shield as v, Trash2 as y } from "lucide-react";
|
|
16
|
+
import { useFeatureFlagDetails as b } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
17
|
+
import { usePermissions as ne } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
18
|
+
import { Fragment as re, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
19
|
+
import { useParams as C } from "react-router-dom";
|
|
20
|
+
//#region src/organization-management/modules/members/pages/MembersListPage.tsx
|
|
21
|
+
function w() {
|
|
22
|
+
let e = n();
|
|
23
|
+
return (t) => t ? new Date(t).toLocaleDateString() : e("common.status.pending", "Pending");
|
|
24
|
+
}
|
|
25
|
+
function T() {
|
|
26
|
+
let T = n(), E = w(), { navigate: D, basePath: O = "/organizations" } = e(), { hasPermission: k, isLoading: A } = ne(), j = b("organization.invite"), M = j ? !!j.value : !0, { organizationId: N } = C(), [P, ie] = m(""), F = c(P, 250), [I, L] = m(/* @__PURE__ */ new Set()), { openConfirmDialog: R, ConfirmDialog: z } = ee(), { members: B, loading: V, error: H, refetch: U } = d(N ?? "", 50, 0), { removeMember: W, loading: G } = f(), K = p(() => {
|
|
27
|
+
if (!F) return B;
|
|
28
|
+
let e = F.toLowerCase();
|
|
29
|
+
return B.filter((t) => t.userId.toLowerCase().includes(e) || t.role.toLowerCase().includes(e));
|
|
30
|
+
}, [F, B]);
|
|
31
|
+
te(() => {
|
|
32
|
+
L((e) => {
|
|
33
|
+
let t = new Set(K.map((e) => e.id)), n = new Set([...e].filter((e) => t.has(e)));
|
|
34
|
+
return n.size === e.size ? e : n;
|
|
35
|
+
});
|
|
36
|
+
}, [K]);
|
|
37
|
+
let q = p(() => K.filter((e) => I.has(e.id)), [K, I]), J = K.length > 0 && K.every((e) => I.has(e.id)), Y = K.some((e) => I.has(e.id)) && !J, X = async (e) => {
|
|
38
|
+
if (N) try {
|
|
39
|
+
let n = (await Promise.allSettled(e.map(async (e) => {
|
|
40
|
+
let t = await W(N, e);
|
|
41
|
+
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Failed to remove member");
|
|
42
|
+
}))).find((e) => e.status === "rejected");
|
|
43
|
+
if (n?.status === "rejected") throw n.reason;
|
|
44
|
+
L(/* @__PURE__ */ new Set()), await U(), t.success(e.length === 1 ? T("members.remove.successSingle", "Member removed successfully") : `${e.length} ${T("members.remove.successMany", "members removed successfully")}`);
|
|
45
|
+
} catch (e) {
|
|
46
|
+
t.error(e instanceof Error ? e.message : T("members.remove.failed", "Failed to remove member"));
|
|
47
|
+
}
|
|
48
|
+
}, Z = (e) => {
|
|
49
|
+
R({
|
|
50
|
+
title: T("members.remove.title", "Remove member"),
|
|
51
|
+
description: `${T("members.remove.descriptionPrefix", "Remove")} ${e} ${T("members.remove.descriptionSuffix", "from this organization? Workspace access inherited from this membership will be impacted.")}`,
|
|
52
|
+
confirmText: T("members.remove.confirm", "Remove"),
|
|
53
|
+
variant: "danger",
|
|
54
|
+
onConfirm: () => {
|
|
55
|
+
X([e]);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}, ae = () => {
|
|
59
|
+
q.length !== 0 && R({
|
|
60
|
+
title: T("members.remove.bulkTitle", "Remove selected members"),
|
|
61
|
+
description: `${T("members.remove.bulkPrefix", "Remove")} ${q.length} ${T(q.length === 1 ? "members.remove.bulkSuffixSingle" : "members.remove.bulkSuffixMany", q.length === 1 ? "selected member from this organization?" : "selected members from this organization?")}`,
|
|
62
|
+
confirmText: `${T("members.remove.confirm", "Remove")} ${q.length}`,
|
|
63
|
+
variant: "danger",
|
|
64
|
+
onConfirm: () => {
|
|
65
|
+
X(q.map((e) => e.userId));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}, Q = (e, t) => {
|
|
69
|
+
L((n) => {
|
|
70
|
+
let r = new Set(n);
|
|
71
|
+
return t ? r.add(e) : r.delete(e), r;
|
|
72
|
+
});
|
|
73
|
+
}, $ = (e) => {
|
|
74
|
+
L((t) => {
|
|
75
|
+
let n = new Set(t);
|
|
76
|
+
return K.forEach((t) => {
|
|
77
|
+
e ? n.add(t.id) : n.delete(t.id);
|
|
78
|
+
}), n;
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
return N ? A ? /* @__PURE__ */ x("div", {
|
|
82
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
83
|
+
children: /* @__PURE__ */ x(a, { message: T("common.loadingPermissions", "Loading permissions...") })
|
|
84
|
+
}) : k(l.MEMBER_LIST) ? V ? /* @__PURE__ */ x("div", {
|
|
85
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
86
|
+
children: /* @__PURE__ */ x(a, { message: T("members.list.loading", "Loading members...") })
|
|
87
|
+
}) : H ? /* @__PURE__ */ x("div", {
|
|
88
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
89
|
+
children: /* @__PURE__ */ x(o, {
|
|
90
|
+
message: H.message,
|
|
91
|
+
action: {
|
|
92
|
+
label: T("common.retry", "Retry"),
|
|
93
|
+
onClick: () => {
|
|
94
|
+
U();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
}) : /* @__PURE__ */ S("div", {
|
|
99
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
|
|
100
|
+
children: [/* @__PURE__ */ S("div", {
|
|
101
|
+
className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
|
|
102
|
+
children: [
|
|
103
|
+
/* @__PURE__ */ S("div", {
|
|
104
|
+
className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
|
|
105
|
+
children: [/* @__PURE__ */ S("div", {
|
|
106
|
+
className: "space-y-2",
|
|
107
|
+
children: [/* @__PURE__ */ x("h1", {
|
|
108
|
+
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
109
|
+
children: T("members.list.title", "Members")
|
|
110
|
+
}), /* @__PURE__ */ x("p", {
|
|
111
|
+
className: "max-w-2xl text-[var(--color-text-secondary)]",
|
|
112
|
+
children: T("members.list.subtitle", "Manage organization members, inspect their roles, and invite more people into this organization.")
|
|
113
|
+
})]
|
|
114
|
+
}), M && k(l.MEMBER_INVITE) && /* @__PURE__ */ S("button", {
|
|
115
|
+
onClick: () => D(`${O}/${N}/members/invite`),
|
|
116
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90 active:scale-[0.98]",
|
|
117
|
+
children: [/* @__PURE__ */ x(g, {
|
|
118
|
+
size: 18,
|
|
119
|
+
"aria-hidden": "true"
|
|
120
|
+
}), /* @__PURE__ */ x("span", {
|
|
121
|
+
className: "font-medium",
|
|
122
|
+
children: T("members.invite.button", "Invite Member")
|
|
123
|
+
})]
|
|
124
|
+
})]
|
|
125
|
+
}),
|
|
126
|
+
/* @__PURE__ */ S("div", {
|
|
127
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]",
|
|
128
|
+
children: [/* @__PURE__ */ S("div", {
|
|
129
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-center",
|
|
130
|
+
children: [/* @__PURE__ */ x(r, {
|
|
131
|
+
value: P,
|
|
132
|
+
onChange: ie,
|
|
133
|
+
placeholder: T("members.list.searchPlaceholder", "Search by member ID or role..."),
|
|
134
|
+
label: T("members.list.searchLabel", "Search organization members"),
|
|
135
|
+
inputId: "organization-members-search",
|
|
136
|
+
className: "flex-1"
|
|
137
|
+
}), /* @__PURE__ */ x("button", {
|
|
138
|
+
onClick: () => {
|
|
139
|
+
U();
|
|
140
|
+
},
|
|
141
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] px-4 py-2 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)] active:scale-95",
|
|
142
|
+
"aria-label": T("members.list.refresh", "Refresh members"),
|
|
143
|
+
title: T("members.list.refresh", "Refresh members"),
|
|
144
|
+
children: /* @__PURE__ */ x(_, {
|
|
145
|
+
size: 18,
|
|
146
|
+
"aria-hidden": "true"
|
|
147
|
+
})
|
|
148
|
+
})]
|
|
149
|
+
}), K.length > 0 ? /* @__PURE__ */ S("div", {
|
|
150
|
+
className: "mt-4 flex flex-col gap-3 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
151
|
+
children: [/* @__PURE__ */ S("div", {
|
|
152
|
+
className: "flex flex-wrap items-center gap-3",
|
|
153
|
+
children: [/* @__PURE__ */ S("label", {
|
|
154
|
+
className: "flex items-center gap-2 text-sm text-[var(--color-text-primary)]",
|
|
155
|
+
children: [/* @__PURE__ */ x(i, {
|
|
156
|
+
checked: J,
|
|
157
|
+
indeterminate: Y,
|
|
158
|
+
onChange: $,
|
|
159
|
+
ariaLabel: T("members.list.selectAll", "Select all members")
|
|
160
|
+
}), /* @__PURE__ */ x("span", { children: T("common.selectAllVisible", "Select all visible") })]
|
|
161
|
+
}), I.size > 0 ? /* @__PURE__ */ x("button", {
|
|
162
|
+
onClick: () => L(/* @__PURE__ */ new Set()),
|
|
163
|
+
className: "text-sm text-[var(--color-text-secondary)] transition-colors hover:text-[var(--color-text-primary)]",
|
|
164
|
+
children: T("common.clearSelection", "Clear selection")
|
|
165
|
+
}) : null]
|
|
166
|
+
}), /* @__PURE__ */ S("div", {
|
|
167
|
+
className: "flex flex-col gap-2 sm:flex-row sm:items-center",
|
|
168
|
+
children: [/* @__PURE__ */ S("span", {
|
|
169
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
170
|
+
children: [
|
|
171
|
+
I.size,
|
|
172
|
+
" ",
|
|
173
|
+
T("common.selected", "selected")
|
|
174
|
+
]
|
|
175
|
+
}), k(l.MEMBER_REMOVE) && /* @__PURE__ */ S("button", {
|
|
176
|
+
onClick: ae,
|
|
177
|
+
disabled: q.length === 0 || G,
|
|
178
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
179
|
+
children: [
|
|
180
|
+
/* @__PURE__ */ x(y, {
|
|
181
|
+
size: 16,
|
|
182
|
+
"aria-hidden": "true"
|
|
183
|
+
}),
|
|
184
|
+
/* @__PURE__ */ x("span", { children: T("common.removeSelected", "Remove Selected") }),
|
|
185
|
+
q.length > 0 ? /* @__PURE__ */ S("span", { children: [
|
|
186
|
+
"(",
|
|
187
|
+
q.length,
|
|
188
|
+
")"
|
|
189
|
+
] }) : null
|
|
190
|
+
]
|
|
191
|
+
})]
|
|
192
|
+
})]
|
|
193
|
+
}) : null]
|
|
194
|
+
}),
|
|
195
|
+
K.length === 0 ? /* @__PURE__ */ x("div", {
|
|
196
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-6 shadow-[var(--shadow-elevation-1)]",
|
|
197
|
+
children: /* @__PURE__ */ x(s, {
|
|
198
|
+
icon: /* @__PURE__ */ x(v, {
|
|
199
|
+
size: 40,
|
|
200
|
+
"aria-hidden": "true"
|
|
201
|
+
}),
|
|
202
|
+
title: T("members.list.emptyTitle", "No members found"),
|
|
203
|
+
description: T("members.list.emptyDescription", "Invite someone to this organization to grant them access and assign their role."),
|
|
204
|
+
action: M && k(l.MEMBER_INVITE) ? {
|
|
205
|
+
label: T("members.invite.button", "Invite Member"),
|
|
206
|
+
onClick: () => D(`${O}/${N}/members/invite`)
|
|
207
|
+
} : void 0
|
|
208
|
+
})
|
|
209
|
+
}) : /* @__PURE__ */ S(re, { children: [/* @__PURE__ */ x("div", {
|
|
210
|
+
className: "grid gap-4 md:hidden",
|
|
211
|
+
children: K.map((e) => /* @__PURE__ */ S("article", {
|
|
212
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]",
|
|
213
|
+
children: [/* @__PURE__ */ S("div", {
|
|
214
|
+
className: "flex items-start gap-3",
|
|
215
|
+
children: [/* @__PURE__ */ x(i, {
|
|
216
|
+
checked: I.has(e.id),
|
|
217
|
+
onChange: (t) => Q(e.id, t),
|
|
218
|
+
ariaLabel: `${T("members.list.selectMember", "Select member")} ${e.userId}`
|
|
219
|
+
}), /* @__PURE__ */ S("div", {
|
|
220
|
+
className: "flex min-w-0 flex-1 gap-3",
|
|
221
|
+
children: [/* @__PURE__ */ x("div", {
|
|
222
|
+
className: "flex h-10 w-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
223
|
+
children: /* @__PURE__ */ x(v, {
|
|
224
|
+
size: 18,
|
|
225
|
+
"aria-hidden": "true"
|
|
226
|
+
})
|
|
227
|
+
}), /* @__PURE__ */ S("div", {
|
|
228
|
+
className: "min-w-0 flex-1 space-y-3",
|
|
229
|
+
children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ S("div", {
|
|
230
|
+
className: "flex flex-wrap items-start gap-2",
|
|
231
|
+
children: [/* @__PURE__ */ x("h2", {
|
|
232
|
+
className: "break-all text-base font-semibold text-[var(--color-text-primary)]",
|
|
233
|
+
children: e.userId
|
|
234
|
+
}), /* @__PURE__ */ x(u, { role: e.role })]
|
|
235
|
+
}), /* @__PURE__ */ S("p", {
|
|
236
|
+
className: "mt-1 break-all font-mono text-xs text-[var(--color-text-muted)]",
|
|
237
|
+
children: [
|
|
238
|
+
T("members.list.memberId", "Member ID"),
|
|
239
|
+
": ",
|
|
240
|
+
e.id
|
|
241
|
+
]
|
|
242
|
+
})] }), /* @__PURE__ */ S("dl", {
|
|
243
|
+
className: "grid grid-cols-1 gap-3 text-sm",
|
|
244
|
+
children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
|
|
245
|
+
className: "text-[var(--color-text-secondary)]",
|
|
246
|
+
children: T("members.list.invitedBy", "Invited by")
|
|
247
|
+
}), /* @__PURE__ */ x("dd", {
|
|
248
|
+
className: "mt-1 break-all font-mono text-[var(--color-text-primary)]",
|
|
249
|
+
children: e.invitedBy || T("common.notAvailable", "N/A")
|
|
250
|
+
})] }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
|
|
251
|
+
className: "text-[var(--color-text-secondary)]",
|
|
252
|
+
children: T("members.list.joined", "Joined")
|
|
253
|
+
}), /* @__PURE__ */ x("dd", {
|
|
254
|
+
className: "mt-1 text-[var(--color-text-primary)]",
|
|
255
|
+
children: E(e.joinedAt)
|
|
256
|
+
})] })]
|
|
257
|
+
})]
|
|
258
|
+
})]
|
|
259
|
+
})]
|
|
260
|
+
}), /* @__PURE__ */ S("div", {
|
|
261
|
+
className: "mt-4 flex flex-wrap gap-2 border-t border-[var(--color-border-default)] pt-4",
|
|
262
|
+
children: [/* @__PURE__ */ S("button", {
|
|
263
|
+
onClick: () => D(`${O}/${N}/members/${e.userId}`),
|
|
264
|
+
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
265
|
+
children: [/* @__PURE__ */ x(h, {
|
|
266
|
+
size: 16,
|
|
267
|
+
"aria-hidden": "true"
|
|
268
|
+
}), T("common.view", "View")]
|
|
269
|
+
}), k(l.MEMBER_REMOVE) && /* @__PURE__ */ S("button", {
|
|
270
|
+
onClick: () => Z(e.userId),
|
|
271
|
+
disabled: G,
|
|
272
|
+
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-sm text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
273
|
+
children: [/* @__PURE__ */ x(y, {
|
|
274
|
+
size: 16,
|
|
275
|
+
"aria-hidden": "true"
|
|
276
|
+
}), T("members.remove.confirm", "Remove")]
|
|
277
|
+
})]
|
|
278
|
+
})]
|
|
279
|
+
}, e.id))
|
|
280
|
+
}), /* @__PURE__ */ x("div", {
|
|
281
|
+
className: "hidden overflow-hidden rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] shadow-[var(--shadow-elevation-1)] md:block",
|
|
282
|
+
children: /* @__PURE__ */ x("div", {
|
|
283
|
+
className: "overflow-x-auto",
|
|
284
|
+
children: /* @__PURE__ */ S("table", {
|
|
285
|
+
className: "min-w-full",
|
|
286
|
+
children: [/* @__PURE__ */ x("thead", {
|
|
287
|
+
className: "bg-[var(--color-bg-subtle)]",
|
|
288
|
+
children: /* @__PURE__ */ S("tr", { children: [
|
|
289
|
+
/* @__PURE__ */ x("th", {
|
|
290
|
+
className: "w-12 px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
291
|
+
children: /* @__PURE__ */ x(i, {
|
|
292
|
+
checked: J,
|
|
293
|
+
indeterminate: Y,
|
|
294
|
+
onChange: $,
|
|
295
|
+
ariaLabel: T("members.list.selectAll", "Select all members")
|
|
296
|
+
})
|
|
297
|
+
}),
|
|
298
|
+
/* @__PURE__ */ x("th", {
|
|
299
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
300
|
+
children: T("members.list.column.user", "User")
|
|
301
|
+
}),
|
|
302
|
+
/* @__PURE__ */ x("th", {
|
|
303
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
304
|
+
children: T("members.list.column.role", "Role")
|
|
305
|
+
}),
|
|
306
|
+
/* @__PURE__ */ x("th", {
|
|
307
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
308
|
+
children: T("members.list.invitedBy", "Invited by")
|
|
309
|
+
}),
|
|
310
|
+
/* @__PURE__ */ x("th", {
|
|
311
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
312
|
+
children: T("members.list.joined", "Joined")
|
|
313
|
+
}),
|
|
314
|
+
/* @__PURE__ */ x("th", {
|
|
315
|
+
className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
316
|
+
children: T("common.actions", "Actions")
|
|
317
|
+
})
|
|
318
|
+
] })
|
|
319
|
+
}), /* @__PURE__ */ x("tbody", {
|
|
320
|
+
className: "divide-y divide-[var(--color-border-default)]",
|
|
321
|
+
children: K.map((e) => /* @__PURE__ */ S("tr", {
|
|
322
|
+
className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
323
|
+
children: [
|
|
324
|
+
/* @__PURE__ */ x("td", {
|
|
325
|
+
className: "px-6 py-4 align-top",
|
|
326
|
+
children: /* @__PURE__ */ x(i, {
|
|
327
|
+
checked: I.has(e.id),
|
|
328
|
+
onChange: (t) => Q(e.id, t),
|
|
329
|
+
ariaLabel: `${T("members.list.selectMember", "Select member")} ${e.userId}`
|
|
330
|
+
})
|
|
331
|
+
}),
|
|
332
|
+
/* @__PURE__ */ x("td", {
|
|
333
|
+
className: "px-6 py-4",
|
|
334
|
+
children: /* @__PURE__ */ S("div", {
|
|
335
|
+
className: "flex items-start gap-3",
|
|
336
|
+
children: [/* @__PURE__ */ x("div", {
|
|
337
|
+
className: "flex h-10 w-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
338
|
+
children: /* @__PURE__ */ x(v, {
|
|
339
|
+
size: 18,
|
|
340
|
+
"aria-hidden": "true"
|
|
341
|
+
})
|
|
342
|
+
}), /* @__PURE__ */ S("div", {
|
|
343
|
+
className: "min-w-0",
|
|
344
|
+
children: [/* @__PURE__ */ x("p", {
|
|
345
|
+
className: "break-all font-medium text-[var(--color-text-primary)]",
|
|
346
|
+
children: e.userId
|
|
347
|
+
}), /* @__PURE__ */ S("p", {
|
|
348
|
+
className: "break-all font-mono text-xs text-[var(--color-text-muted)]",
|
|
349
|
+
children: [
|
|
350
|
+
T("common.idLabel", "ID"),
|
|
351
|
+
": ",
|
|
352
|
+
e.id
|
|
353
|
+
]
|
|
354
|
+
})]
|
|
355
|
+
})]
|
|
356
|
+
})
|
|
357
|
+
}),
|
|
358
|
+
/* @__PURE__ */ x("td", {
|
|
359
|
+
className: "px-6 py-4 align-top",
|
|
360
|
+
children: /* @__PURE__ */ x(u, { role: e.role })
|
|
361
|
+
}),
|
|
362
|
+
/* @__PURE__ */ x("td", {
|
|
363
|
+
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
364
|
+
children: e.invitedBy || T("common.notAvailable", "N/A")
|
|
365
|
+
}),
|
|
366
|
+
/* @__PURE__ */ x("td", {
|
|
367
|
+
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
368
|
+
children: E(e.joinedAt)
|
|
369
|
+
}),
|
|
370
|
+
/* @__PURE__ */ x("td", {
|
|
371
|
+
className: "px-6 py-4 align-top",
|
|
372
|
+
children: /* @__PURE__ */ S("div", {
|
|
373
|
+
className: "flex items-center justify-end gap-2",
|
|
374
|
+
children: [/* @__PURE__ */ x("button", {
|
|
375
|
+
onClick: () => D(`${O}/${N}/members/${e.userId}`),
|
|
376
|
+
className: "rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]",
|
|
377
|
+
"aria-label": `${T("members.list.viewMember", "View member")} ${e.userId}`,
|
|
378
|
+
title: `${T("members.list.viewMember", "View member")} ${e.userId}`,
|
|
379
|
+
children: /* @__PURE__ */ x(h, {
|
|
380
|
+
size: 18,
|
|
381
|
+
"aria-hidden": "true"
|
|
382
|
+
})
|
|
383
|
+
}), k(l.MEMBER_REMOVE) && /* @__PURE__ */ x("button", {
|
|
384
|
+
onClick: () => Z(e.userId),
|
|
385
|
+
disabled: G,
|
|
386
|
+
className: "rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
387
|
+
"aria-label": `${T("members.list.removeMember", "Remove member")} ${e.userId}`,
|
|
388
|
+
title: `${T("members.list.removeMember", "Remove member")} ${e.userId}`,
|
|
389
|
+
children: /* @__PURE__ */ x(y, {
|
|
390
|
+
size: 18,
|
|
391
|
+
"aria-hidden": "true"
|
|
392
|
+
})
|
|
393
|
+
})]
|
|
394
|
+
})
|
|
395
|
+
})
|
|
396
|
+
]
|
|
397
|
+
}, e.id))
|
|
398
|
+
})]
|
|
399
|
+
})
|
|
400
|
+
})
|
|
401
|
+
})] })
|
|
402
|
+
]
|
|
403
|
+
}), z]
|
|
404
|
+
}) : /* @__PURE__ */ x("div", {
|
|
405
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
406
|
+
children: /* @__PURE__ */ x("div", {
|
|
407
|
+
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
408
|
+
children: T("members.list.noPermission", "You don't have permission to view members.")
|
|
409
|
+
})
|
|
410
|
+
}) : /* @__PURE__ */ x("div", {
|
|
411
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
412
|
+
children: /* @__PURE__ */ x(o, {
|
|
413
|
+
message: T("members.list.missingOrg", "Organization ID is required to view members"),
|
|
414
|
+
action: {
|
|
415
|
+
label: T("members.list.goToOrganizations", "Go to Organizations"),
|
|
416
|
+
onClick: () => D(O)
|
|
417
|
+
}
|
|
418
|
+
})
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
//#endregion
|
|
422
|
+
export { T as MembersListPage };
|
|
423
|
+
|
|
424
|
+
//# sourceMappingURL=MembersListPage.js.map
|