@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,73 @@
|
|
|
1
|
+
import { OrganizationsListPage as e } from "./modules/organizations/pages/OrganizationsListPage.js";
|
|
2
|
+
import { Suspense as t, lazy as n } from "react";
|
|
3
|
+
import { useFeatureFlagDetails as r } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
import { Route as o, Routes as s } from "react-router-dom";
|
|
6
|
+
//#region src/organization-management/AdminOrganizationRoutes.tsx
|
|
7
|
+
var c = n(() => import("./modules/organizations/pages/OrganizationCreatePage.js").then((e) => ({ default: e.OrganizationCreatePage }))), l = n(() => import("./modules/organizations/pages/OrganizationDetailPage.js").then((e) => ({ default: e.OrganizationDetailPage }))), u = n(() => import("./modules/organizations/pages/OrganizationEditPage.js").then((e) => ({ default: e.OrganizationEditPage }))), d = n(() => import("./modules/workspaces/pages/WorkspacesListPage.js").then((e) => ({ default: e.WorkspacesListPage }))), f = n(() => import("./modules/workspaces/pages/WorkspaceCreatePage.js").then((e) => ({ default: e.WorkspaceCreatePage }))), p = n(() => import("./modules/workspaces/pages/WorkspaceDetailPage.js").then((e) => ({ default: e.WorkspaceDetailPage }))), m = n(() => import("./modules/workspaces/pages/WorkspaceEditPage.js").then((e) => ({ default: e.WorkspaceEditPage }))), h = n(() => import("./modules/members/pages/MembersListPage.js").then((e) => ({ default: e.MembersListPage }))), g = n(() => import("./modules/members/pages/MemberDetailPage.js").then((e) => ({ default: e.MemberDetailPage }))), _ = n(() => import("./modules/members/pages/InviteMemberPage.js").then((e) => ({ default: e.InviteMemberPage }))), v = n(() => import("./modules/members/pages/MyInvitesPage.js").then((e) => ({ default: e.MyInvitesPage })));
|
|
8
|
+
function y() {
|
|
9
|
+
return /* @__PURE__ */ i("div", {
|
|
10
|
+
className: "flex items-center justify-center min-h-[200px]",
|
|
11
|
+
children: /* @__PURE__ */ i("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-[var(--color-border-default)] border-t-[var(--color-action-primary-bg)]" })
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function b() {
|
|
15
|
+
let n = r("organization.create"), b = r("organization.workspaces"), x = r("organization.members"), S = r("organization.invite"), C = n ? !!n.value : !0, w = b ? !!b.value : !0, T = x ? !!x.value : !0, E = S ? !!S.value : !0;
|
|
16
|
+
return /* @__PURE__ */ i(t, {
|
|
17
|
+
fallback: /* @__PURE__ */ i(y, {}),
|
|
18
|
+
children: /* @__PURE__ */ a(s, { children: [
|
|
19
|
+
/* @__PURE__ */ i(o, {
|
|
20
|
+
index: !0,
|
|
21
|
+
element: /* @__PURE__ */ i(e, {})
|
|
22
|
+
}),
|
|
23
|
+
C && /* @__PURE__ */ i(o, {
|
|
24
|
+
path: "new",
|
|
25
|
+
element: /* @__PURE__ */ i(c, {})
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ i(o, {
|
|
28
|
+
path: ":id",
|
|
29
|
+
element: /* @__PURE__ */ i(l, {})
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ i(o, {
|
|
32
|
+
path: ":id/edit",
|
|
33
|
+
element: /* @__PURE__ */ i(u, {})
|
|
34
|
+
}),
|
|
35
|
+
w && /* @__PURE__ */ i(o, {
|
|
36
|
+
path: "workspaces",
|
|
37
|
+
element: /* @__PURE__ */ i(d, {})
|
|
38
|
+
}),
|
|
39
|
+
w && /* @__PURE__ */ i(o, {
|
|
40
|
+
path: "workspaces/new",
|
|
41
|
+
element: /* @__PURE__ */ i(f, {})
|
|
42
|
+
}),
|
|
43
|
+
w && /* @__PURE__ */ i(o, {
|
|
44
|
+
path: "workspaces/:id",
|
|
45
|
+
element: /* @__PURE__ */ i(p, {})
|
|
46
|
+
}),
|
|
47
|
+
w && /* @__PURE__ */ i(o, {
|
|
48
|
+
path: "workspaces/:id/edit",
|
|
49
|
+
element: /* @__PURE__ */ i(m, {})
|
|
50
|
+
}),
|
|
51
|
+
/* @__PURE__ */ i(o, {
|
|
52
|
+
path: "invites",
|
|
53
|
+
element: /* @__PURE__ */ i(v, {})
|
|
54
|
+
}),
|
|
55
|
+
E && /* @__PURE__ */ i(o, {
|
|
56
|
+
path: ":organizationId/members/invite",
|
|
57
|
+
element: /* @__PURE__ */ i(_, {})
|
|
58
|
+
}),
|
|
59
|
+
T && /* @__PURE__ */ i(o, {
|
|
60
|
+
path: ":organizationId/members",
|
|
61
|
+
element: /* @__PURE__ */ i(h, {})
|
|
62
|
+
}),
|
|
63
|
+
T && /* @__PURE__ */ i(o, {
|
|
64
|
+
path: ":organizationId/members/:userId",
|
|
65
|
+
element: /* @__PURE__ */ i(g, {})
|
|
66
|
+
})
|
|
67
|
+
] })
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { b as AdminOrganizationRoutes };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=AdminOrganizationRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminOrganizationRoutes.js","names":[],"sources":["../../src/organization-management/AdminOrganizationRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\n\n// Eager load - main entry point page\nimport { OrganizationsListPage } from './modules/organizations/pages/OrganizationsListPage';\n\n// Lazy load - secondary pages\nconst OrganizationCreatePage = lazy(() =>\n import('./modules/organizations/pages/OrganizationCreatePage').then((m) => ({\n default: m.OrganizationCreatePage,\n }))\n);\nconst OrganizationDetailPage = lazy(() =>\n import('./modules/organizations/pages/OrganizationDetailPage').then((m) => ({\n default: m.OrganizationDetailPage,\n }))\n);\nconst OrganizationEditPage = lazy(() =>\n import('./modules/organizations/pages/OrganizationEditPage').then((m) => ({\n default: m.OrganizationEditPage,\n }))\n);\n\n// Workspaces - lazy load all\nconst WorkspacesListPage = lazy(() =>\n import('./modules/workspaces/pages/WorkspacesListPage').then((m) => ({\n default: m.WorkspacesListPage,\n }))\n);\nconst WorkspaceCreatePage = lazy(() =>\n import('./modules/workspaces/pages/WorkspaceCreatePage').then((m) => ({\n default: m.WorkspaceCreatePage,\n }))\n);\nconst WorkspaceDetailPage = lazy(() =>\n import('./modules/workspaces/pages/WorkspaceDetailPage').then((m) => ({\n default: m.WorkspaceDetailPage,\n }))\n);\nconst WorkspaceEditPage = lazy(() =>\n import('./modules/workspaces/pages/WorkspaceEditPage').then((m) => ({\n default: m.WorkspaceEditPage,\n }))\n);\n\n// Members - lazy load all\nconst MembersListPage = lazy(() =>\n import('./modules/members/pages/MembersListPage').then((m) => ({ default: m.MembersListPage }))\n);\nconst MemberDetailPage = lazy(() =>\n import('./modules/members/pages/MemberDetailPage').then((m) => ({ default: m.MemberDetailPage }))\n);\nconst InviteMemberPage = lazy(() =>\n import('./modules/members/pages/InviteMemberPage').then((m) => ({ default: m.InviteMemberPage }))\n);\nconst MyInvitesPage = lazy(() =>\n import('./modules/members/pages/MyInvitesPage').then((m) => ({ default: m.MyInvitesPage }))\n);\n\n/**\n * Loading fallback for lazy-loaded pages\n */\nfunction PageLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center min-h-[200px]\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-[var(--color-border-default)] border-t-[var(--color-action-primary-bg)]\" />\n </div>\n );\n}\n\n/**\n * AdminOrganizationRoutes\n *\n * Full admin routing surface for the organization management MFE,\n * mounted by the admin application. Exposes all pages:\n * organizations CRUD, workspaces CRUD, members management, and\n * user-level invites.\n *\n * Routes start from root (/) since parent route is /organizations/*\n *\n * Lazy loading strategy:\n * - OrganizationsListPage: Eager loaded (main entry point)\n * - All other pages: Lazy loaded for better initial bundle size\n */\nexport function AdminOrganizationRoutes() {\n // Keep aligned with the platform feature-flag default-allow policy: an\n // unseeded flag must not disable shipped CRUDL. Explicit false still gates a\n // surface off when admins configure the flag.\n const createDetails = useFeatureFlagDetails('organization.create');\n const workspacesDetails = useFeatureFlagDetails('organization.workspaces');\n const membersDetails = useFeatureFlagDetails('organization.members');\n const inviteDetails = useFeatureFlagDetails('organization.invite');\n const createEnabled = createDetails ? Boolean(createDetails.value) : true;\n const workspacesEnabled = workspacesDetails ? Boolean(workspacesDetails.value) : true;\n const membersEnabled = membersDetails ? Boolean(membersDetails.value) : true;\n const inviteEnabled = inviteDetails ? Boolean(inviteDetails.value) : true;\n\n return (\n <Suspense fallback={<PageLoadingFallback />}>\n <Routes>\n {/* Organizations - index is the list (eager loaded) */}\n <Route index element={<OrganizationsListPage />} />\n {createEnabled && <Route path=\"new\" element={<OrganizationCreatePage />} />}\n <Route path=\":id\" element={<OrganizationDetailPage />} />\n <Route path=\":id/edit\" element={<OrganizationEditPage />} />\n\n {/* Workspaces */}\n {workspacesEnabled && <Route path=\"workspaces\" element={<WorkspacesListPage />} />}\n {workspacesEnabled && <Route path=\"workspaces/new\" element={<WorkspaceCreatePage />} />}\n {workspacesEnabled && <Route path=\"workspaces/:id\" element={<WorkspaceDetailPage />} />}\n {workspacesEnabled && <Route path=\"workspaces/:id/edit\" element={<WorkspaceEditPage />} />}\n\n {/* My Invites - user-level, not org-scoped */}\n <Route path=\"invites\" element={<MyInvitesPage />} />\n\n {/* Member routes - scoped under organization ID */}\n {/* Invite route is matched before generic :userId, so declare it first */}\n {inviteEnabled && (\n <Route path=\":organizationId/members/invite\" element={<InviteMemberPage />} />\n )}\n {membersEnabled && <Route path=\":organizationId/members\" element={<MembersListPage />} />}\n {membersEnabled && (\n <Route path=\":organizationId/members/:userId\" element={<MemberDetailPage />} />\n )}\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":";;;;;;AAQA,IAAM,IAAyB,QAC7B,OAAO,2DAAwD,MAAM,OAAO,EAC1E,SAAS,EAAE,wBACZ,EAAE,CACJ,EACK,IAAyB,QAC7B,OAAO,2DAAwD,MAAM,OAAO,EAC1E,SAAS,EAAE,wBACZ,EAAE,CACJ,EACK,IAAuB,QAC3B,OAAO,yDAAsD,MAAM,OAAO,EACxE,SAAS,EAAE,sBACZ,EAAE,CACJ,EAGK,IAAqB,QACzB,OAAO,oDAAiD,MAAM,OAAO,EACnE,SAAS,EAAE,oBACZ,EAAE,CACJ,EACK,IAAsB,QAC1B,OAAO,qDAAkD,MAAM,OAAO,EACpE,SAAS,EAAE,qBACZ,EAAE,CACJ,EACK,IAAsB,QAC1B,OAAO,qDAAkD,MAAM,OAAO,EACpE,SAAS,EAAE,qBACZ,EAAE,CACJ,EACK,IAAoB,QACxB,OAAO,mDAAgD,MAAM,OAAO,EAClE,SAAS,EAAE,mBACZ,EAAE,CACJ,EAGK,IAAkB,QACtB,OAAO,8CAA2C,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChG,EACK,IAAmB,QACvB,OAAO,+CAA4C,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClG,EACK,IAAmB,QACvB,OAAO,+CAA4C,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClG,EACK,IAAgB,QACpB,OAAO,4CAAyC,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5F;AAKD,SAAS,IAAsB;AAC7B,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,6HAA8H,CAAA;EACzI,CAAA;;AAkBV,SAAgB,IAA0B;CAIxC,IAAM,IAAgB,EAAsB,sBAAsB,EAC5D,IAAoB,EAAsB,0BAA0B,EACpE,IAAiB,EAAsB,uBAAuB,EAC9D,IAAgB,EAAsB,sBAAsB,EAC5D,IAAgB,IAAgB,EAAQ,EAAc,QAAS,IAC/D,IAAoB,IAAoB,EAAQ,EAAkB,QAAS,IAC3E,IAAiB,IAAiB,EAAQ,EAAe,QAAS,IAClE,IAAgB,IAAgB,EAAQ,EAAc,QAAS;AAErE,QACE,kBAAC,GAAD;EAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;YACzC,kBAAC,GAAD,EAAA,UAAA;GAEE,kBAAC,GAAD;IAAO,OAAA;IAAM,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GAClD,KAAiB,kBAAC,GAAD;IAAO,MAAK;IAAM,SAAS,kBAAC,GAAD,EAA0B,CAAA;IAAI,CAAA;GAC3E,kBAAC,GAAD;IAAO,MAAK;IAAM,SAAS,kBAAC,GAAD,EAA0B,CAAA;IAAI,CAAA;GACzD,kBAAC,GAAD;IAAO,MAAK;IAAW,SAAS,kBAAC,GAAD,EAAwB,CAAA;IAAI,CAAA;GAG3D,KAAqB,kBAAC,GAAD;IAAO,MAAK;IAAa,SAAS,kBAAC,GAAD,EAAsB,CAAA;IAAI,CAAA;GACjF,KAAqB,kBAAC,GAAD;IAAO,MAAK;IAAiB,SAAS,kBAAC,GAAD,EAAuB,CAAA;IAAI,CAAA;GACtF,KAAqB,kBAAC,GAAD;IAAO,MAAK;IAAiB,SAAS,kBAAC,GAAD,EAAuB,CAAA;IAAI,CAAA;GACtF,KAAqB,kBAAC,GAAD;IAAO,MAAK;IAAsB,SAAS,kBAAC,GAAD,EAAqB,CAAA;IAAI,CAAA;GAG1F,kBAAC,GAAD;IAAO,MAAK;IAAU,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAInD,KACC,kBAAC,GAAD;IAAO,MAAK;IAAiC,SAAS,kBAAC,GAAD,EAAoB,CAAA;IAAI,CAAA;GAE/E,KAAkB,kBAAC,GAAD;IAAO,MAAK;IAA0B,SAAS,kBAAC,GAAD,EAAmB,CAAA;IAAI,CAAA;GACxF,KACC,kBAAC,GAAD;IAAO,MAAK;IAAkC,SAAS,kBAAC,GAAD,EAAoB,CAAA;IAAI,CAAA;GAE1E,EAAA,CAAA;EACA,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { OrganizationRootProps } from './types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* UserOrganizationRoot
|
|
6
|
+
*
|
|
7
|
+
* User-facing root for the organization management MFE, intended to be
|
|
8
|
+
* mounted inside product shells (workspaces, botlit, fluidgrids, etc.).
|
|
9
|
+
*
|
|
10
|
+
* Exposes only user-relevant capabilities — currently the "My Invites"
|
|
11
|
+
* page — and registers a single nav item scoped to the user experience.
|
|
12
|
+
*
|
|
13
|
+
* Takes the same props as `OrganizationRootProps` so hosts can
|
|
14
|
+
* swap between the user and admin roots without adapter code.
|
|
15
|
+
*/
|
|
16
|
+
export declare const UserOrganizationRoot: FC<OrganizationRootProps>;
|
|
17
|
+
//# sourceMappingURL=UserOrganizationRoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOrganizationRoot.d.ts","sourceRoot":"","sources":["../../src/organization-management/UserOrganizationRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,KAAK,EAAW,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG9D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,qBAAqB,CAoD1D,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { OrgConsoleProvider as e } from "./providers/OrgConsoleProvider.js";
|
|
2
|
+
import { UserOrganizationRoutes as t } from "./UserOrganizationRoutes.js";
|
|
3
|
+
import { useEffect as n } from "react";
|
|
4
|
+
import { Mail as r } from "lucide-react";
|
|
5
|
+
import { Toaster as i } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { FeatureFlagProvider as a } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
7
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
8
|
+
//#region src/organization-management/UserOrganizationRoot.tsx
|
|
9
|
+
var c = (c) => {
|
|
10
|
+
let { registerNavItems: l, registerFooterItems: u, basePath: d = "/organizations" } = c, f = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
11
|
+
return n(() => {
|
|
12
|
+
if (l) return l([{
|
|
13
|
+
id: "user-org-invites",
|
|
14
|
+
label: "My Invites",
|
|
15
|
+
path: f(d, "/invites"),
|
|
16
|
+
icon: /* @__PURE__ */ o(r, { size: 20 }),
|
|
17
|
+
order: 30,
|
|
18
|
+
group: "user"
|
|
19
|
+
}]);
|
|
20
|
+
}, [l, d]), n(() => {
|
|
21
|
+
if (u) return u([{
|
|
22
|
+
id: "user-organization-version",
|
|
23
|
+
label: "Organization (User) v0.1.0",
|
|
24
|
+
type: "status",
|
|
25
|
+
order: 30,
|
|
26
|
+
section: "left"
|
|
27
|
+
}]);
|
|
28
|
+
}, [u]), /* @__PURE__ */ o(a, {
|
|
29
|
+
workspaceId: null,
|
|
30
|
+
gateway: "global",
|
|
31
|
+
defaultEnabled: !0,
|
|
32
|
+
children: /* @__PURE__ */ s(e, {
|
|
33
|
+
...c,
|
|
34
|
+
children: [/* @__PURE__ */ o(t, {}), /* @__PURE__ */ o(i, {
|
|
35
|
+
position: "top-right",
|
|
36
|
+
richColors: !0,
|
|
37
|
+
closeButton: !0
|
|
38
|
+
})]
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { c as UserOrganizationRoot };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=UserOrganizationRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOrganizationRoot.js","names":[],"sources":["../../src/organization-management/UserOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Mail } from 'lucide-react';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgConsoleProvider } from './providers/OrgConsoleProvider';\nimport type { NavItem, OrganizationRootProps } from './types';\nimport { UserOrganizationRoutes } from './UserOrganizationRoutes';\n\n/**\n * UserOrganizationRoot\n *\n * User-facing root for the organization management MFE, intended to be\n * mounted inside product shells (workspaces, botlit, fluidgrids, etc.).\n *\n * Exposes only user-relevant capabilities — currently the \"My Invites\"\n * page — and registers a single nav item scoped to the user experience.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can\n * swap between the user and admin roots without adapter code.\n */\nexport const UserOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/organizations' } = props;\n\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n {\n id: 'user-org-invites',\n label: 'My Invites',\n path: joinPath(basePath, '/invites'),\n icon: <Mail size={20} />,\n order: 30,\n group: 'user',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'user-organization-version',\n label: 'Organization (User) v0.1.0',\n type: 'status' as const,\n order: 30,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <UserOrganizationRoutes />\n <Toaster position=\"top-right\" richColors closeButton />\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;AAqBA,IAAa,KAAmD,MAAU;CACxE,IAAM,EAAE,qBAAkB,wBAAqB,cAAW,qBAAqB,GAEzE,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AAuCtD,QAnCA,QAAgB;AACT,QAcL,QADgB,EAXY,CAC1B;GACE,IAAI;GACJ,OAAO;GACP,MAAM,EAAS,GAAU,WAAW;GACpC,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;GACxB,OAAO;GACP,OAAO;GACR,CACF,CAEyC;IAEzC,CAAC,GAAkB,EAAS,CAAC,EAEhC,QAAgB;AACT,QAaL,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO;GACP,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,EAAoB,CAAC,EAGvB,kBAAC,GAAD;EAAqB,aAAa;EAAM,SAAQ;EAAS,gBAAgB;YACvE,kBAAC,GAAD;GAAoB,GAAI;aAAxB,CACE,kBAAC,GAAD,EAA0B,CAAA,EAC1B,kBAAC,GAAD;IAAS,UAAS;IAAY,YAAA;IAAW,aAAA;IAAc,CAAA,CACpC;;EACD,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UserOrganizationRoutes
|
|
3
|
+
*
|
|
4
|
+
* Routes for the user-facing (product shell) organization experience.
|
|
5
|
+
* Only exposes pages that are relevant to end users (non-admins):
|
|
6
|
+
* - `/invites` — the current user's pending invites
|
|
7
|
+
*
|
|
8
|
+
* The default route redirects to `/invites` so product shells can mount
|
|
9
|
+
* this at any basePath and land users on their invites view.
|
|
10
|
+
*/
|
|
11
|
+
export declare function UserOrganizationRoutes(): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=UserOrganizationRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOrganizationRoutes.d.ts","sourceRoot":"","sources":["../../src/organization-management/UserOrganizationRoutes.tsx"],"names":[],"mappings":"AAmBA;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,4CAYrC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Suspense as e, lazy as t } from "react";
|
|
2
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
3
|
+
import { Navigate as i, Route as a, Routes as o } from "react-router-dom";
|
|
4
|
+
//#region src/organization-management/UserOrganizationRoutes.tsx
|
|
5
|
+
var s = t(() => import("./modules/members/pages/MyInvitesPage.js").then((e) => ({ default: e.MyInvitesPage })));
|
|
6
|
+
function c() {
|
|
7
|
+
return /* @__PURE__ */ n("div", {
|
|
8
|
+
className: "flex items-center justify-center min-h-[200px]",
|
|
9
|
+
children: /* @__PURE__ */ n("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-[var(--color-border-default)] border-t-[var(--color-action-primary-bg)]" })
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function l() {
|
|
13
|
+
return /* @__PURE__ */ n(e, {
|
|
14
|
+
fallback: /* @__PURE__ */ n(c, {}),
|
|
15
|
+
children: /* @__PURE__ */ r(o, { children: [/* @__PURE__ */ n(a, {
|
|
16
|
+
index: !0,
|
|
17
|
+
element: /* @__PURE__ */ n(i, {
|
|
18
|
+
to: "invites",
|
|
19
|
+
replace: !0
|
|
20
|
+
})
|
|
21
|
+
}), /* @__PURE__ */ n(a, {
|
|
22
|
+
path: "invites",
|
|
23
|
+
element: /* @__PURE__ */ n(s, {})
|
|
24
|
+
})] })
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { l as UserOrganizationRoutes };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=UserOrganizationRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOrganizationRoutes.js","names":[],"sources":["../../src/organization-management/UserOrganizationRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\n\n// Lazy load - user-facing pages only\nconst MyInvitesPage = lazy(() =>\n import('./modules/members/pages/MyInvitesPage').then((m) => ({ default: m.MyInvitesPage }))\n);\n\n/**\n * Loading fallback for lazy-loaded pages\n */\nfunction PageLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center min-h-[200px]\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-[var(--color-border-default)] border-t-[var(--color-action-primary-bg)]\" />\n </div>\n );\n}\n\n/**\n * UserOrganizationRoutes\n *\n * Routes for the user-facing (product shell) organization experience.\n * Only exposes pages that are relevant to end users (non-admins):\n * - `/invites` — the current user's pending invites\n *\n * The default route redirects to `/invites` so product shells can mount\n * this at any basePath and land users on their invites view.\n */\nexport function UserOrganizationRoutes() {\n return (\n <Suspense fallback={<PageLoadingFallback />}>\n <Routes>\n {/* Default → My Invites */}\n <Route index element={<Navigate to=\"invites\" replace />} />\n\n {/* My Invites - user-level, not org-scoped */}\n <Route path=\"invites\" element={<MyInvitesPage />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":";;;;AAIA,IAAM,IAAgB,QACpB,OAAO,4CAAyC,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5F;AAKD,SAAS,IAAsB;AAC7B,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,6HAA8H,CAAA;EACzI,CAAA;;AAcV,SAAgB,IAAyB;AACvC,QACE,kBAAC,GAAD;EAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;YACzC,kBAAC,GAAD,EAAA,UAAA,CAEE,kBAAC,GAAD;GAAO,OAAA;GAAM,SAAS,kBAAC,GAAD;IAAU,IAAG;IAAU,SAAA;IAAU,CAAA;GAAI,CAAA,EAG3D,kBAAC,GAAD;GAAO,MAAK;GAAU,SAAS,kBAAC,GAAD,EAAiB,CAAA;GAAI,CAAA,CAC7C,EAAA,CAAA;EACA,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Organization Management Permission Constants
|
|
3
|
+
*
|
|
4
|
+
* All permission strings for organization management resources.
|
|
5
|
+
* Use with fe-libs usePermissions hook: hasPermission(PERMISSIONS.ORG_CREATE)
|
|
6
|
+
*
|
|
7
|
+
* Resource types:
|
|
8
|
+
* - organization: list, read, create, update, delete
|
|
9
|
+
* - workspace: list, read, create, update, delete
|
|
10
|
+
* - member: list, read, create, update, delete
|
|
11
|
+
*/
|
|
12
|
+
export declare const PERMISSIONS: {
|
|
13
|
+
readonly ORG_LIST: "organization:list";
|
|
14
|
+
readonly ORG_READ: "organization:read";
|
|
15
|
+
readonly ORG_CREATE: "organization:create";
|
|
16
|
+
readonly ORG_UPDATE: "organization:update";
|
|
17
|
+
readonly ORG_DELETE: "organization:delete";
|
|
18
|
+
readonly WORKSPACE_LIST: "workspace:list";
|
|
19
|
+
readonly WORKSPACE_READ: "workspace:read";
|
|
20
|
+
readonly WORKSPACE_CREATE: "workspace:create";
|
|
21
|
+
readonly WORKSPACE_UPDATE: "workspace:update";
|
|
22
|
+
readonly WORKSPACE_DELETE: "workspace:delete";
|
|
23
|
+
readonly MEMBER_LIST: "member:list";
|
|
24
|
+
readonly MEMBER_READ: "member:read";
|
|
25
|
+
readonly MEMBER_INVITE: "member:create";
|
|
26
|
+
readonly MEMBER_UPDATE: "member:update";
|
|
27
|
+
readonly MEMBER_REMOVE: "member:delete";
|
|
28
|
+
};
|
|
29
|
+
export type OrgPermission = (typeof PERMISSIONS)[keyof typeof PERMISSIONS];
|
|
30
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/organization-management/constants/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CAqBd,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/organization-management/constants/permissions.ts
|
|
2
|
+
var e = {
|
|
3
|
+
ORG_LIST: "organization:list",
|
|
4
|
+
ORG_READ: "organization:read",
|
|
5
|
+
ORG_CREATE: "organization:create",
|
|
6
|
+
ORG_UPDATE: "organization:update",
|
|
7
|
+
ORG_DELETE: "organization:delete",
|
|
8
|
+
WORKSPACE_LIST: "workspace:list",
|
|
9
|
+
WORKSPACE_READ: "workspace:read",
|
|
10
|
+
WORKSPACE_CREATE: "workspace:create",
|
|
11
|
+
WORKSPACE_UPDATE: "workspace:update",
|
|
12
|
+
WORKSPACE_DELETE: "workspace:delete",
|
|
13
|
+
MEMBER_LIST: "member:list",
|
|
14
|
+
MEMBER_READ: "member:read",
|
|
15
|
+
MEMBER_INVITE: "member:create",
|
|
16
|
+
MEMBER_UPDATE: "member:update",
|
|
17
|
+
MEMBER_REMOVE: "member:delete"
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { e as PERMISSIONS };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","names":[],"sources":["../../../src/organization-management/constants/permissions.ts"],"sourcesContent":["/**\n * Organization Management Permission Constants\n *\n * All permission strings for organization management resources.\n * Use with fe-libs usePermissions hook: hasPermission(PERMISSIONS.ORG_CREATE)\n *\n * Resource types:\n * - organization: list, read, create, update, delete\n * - workspace: list, read, create, update, delete\n * - member: list, read, create, update, delete\n */\n\nexport const PERMISSIONS = {\n // Organization resources\n ORG_LIST: 'organization:list',\n ORG_READ: 'organization:read',\n ORG_CREATE: 'organization:create',\n ORG_UPDATE: 'organization:update',\n ORG_DELETE: 'organization:delete',\n\n // Workspace resources\n WORKSPACE_LIST: 'workspace:list',\n WORKSPACE_READ: 'workspace:read',\n WORKSPACE_CREATE: 'workspace:create',\n WORKSPACE_UPDATE: 'workspace:update',\n WORKSPACE_DELETE: 'workspace:delete',\n\n // Member resources\n MEMBER_LIST: 'member:list',\n MEMBER_READ: 'member:read',\n MEMBER_INVITE: 'member:create',\n MEMBER_UPDATE: 'member:update',\n MEMBER_REMOVE: 'member:delete',\n} as const;\n\nexport type OrgPermission = (typeof PERMISSIONS)[keyof typeof PERMISSIONS];\n"],"mappings":";AAYA,IAAa,IAAc;CAEzB,UAAU;CACV,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,YAAY;CAGZ,gBAAgB;CAChB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAGlB,aAAa;CACb,aAAa;CACb,eAAe;CACf,eAAe;CACf,eAAe;CAChB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type OrganizationDomainEvent = 'organization.created' | 'organization.updated' | 'organization.deleted' | 'organization.invite.created' | 'organization.invite.accepted' | 'organization.invite.rejected' | 'organization.invite.cancelled' | 'organization.invite.resent' | 'member.added' | 'member.removed' | 'member.role_changed' | 'organization.create_failed' | 'organization.update_failed' | 'organization.delete_failed' | 'organization.invite.create_failed' | 'organization.invite.accept_failed' | 'organization.invite.reject_failed' | 'organization.invite.cancel_failed' | 'organization.invite.resend_failed' | 'member.add_failed' | 'member.remove_failed' | 'member.role_change_failed' | 'organizations.page.viewed';
|
|
2
|
+
export interface OrganizationEventPayload {
|
|
3
|
+
organizationId?: string;
|
|
4
|
+
organizationName?: string;
|
|
5
|
+
workspaceId?: string;
|
|
6
|
+
inviteId?: string;
|
|
7
|
+
memberId?: string;
|
|
8
|
+
role?: string;
|
|
9
|
+
count?: number;
|
|
10
|
+
source?: string;
|
|
11
|
+
page?: string;
|
|
12
|
+
durationMs?: number;
|
|
13
|
+
errorCode?: string;
|
|
14
|
+
errorMessage?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function useOrganizationEventEmitter(): {
|
|
17
|
+
emit: (event: OrganizationDomainEvent, payload?: OrganizationEventPayload) => void;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=useOrganizationEventEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOrganizationEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/organization-management/hooks/useOrganizationEventEmitter.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,uBAAuB,GAE/B,sBAAsB,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,6BAA6B,GAC7B,8BAA8B,GAC9B,8BAA8B,GAC9B,+BAA+B,GAC/B,4BAA4B,GAC5B,cAAc,GACd,gBAAgB,GAChB,qBAAqB,GAErB,4BAA4B,GAC5B,4BAA4B,GAC5B,4BAA4B,GAC5B,mCAAmC,GACnC,mCAAmC,GACnC,mCAAmC,GACnC,mCAAmC,GACnC,mCAAmC,GACnC,mBAAmB,GACnB,sBAAsB,GACtB,2BAA2B,GAI3B,2BAA2B,CAAC;AAEhC,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,2BAA2B,IAAI;IAC7C,IAAI,EAAE,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACpF,CAgBA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useCallback as e } from "react";
|
|
2
|
+
import { useEventBus as t } from "@burdenoff/fe-libs/shared/events";
|
|
3
|
+
//#region src/organization-management/hooks/useOrganizationEventEmitter.ts
|
|
4
|
+
function n() {
|
|
5
|
+
let n = t();
|
|
6
|
+
return { emit: e((e, t = {}) => {
|
|
7
|
+
try {
|
|
8
|
+
n.emit(e, t);
|
|
9
|
+
} catch {}
|
|
10
|
+
}, [n]) };
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { n as useOrganizationEventEmitter };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=useOrganizationEventEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOrganizationEventEmitter.js","names":[],"sources":["../../../src/organization-management/hooks/useOrganizationEventEmitter.ts"],"sourcesContent":["/**\n * Thin wrapper over `useEventBus` from fe-libs that emits organization-domain\n * lifecycle events to the host shell's event bus. Per\n * `~/products/infra/infra-specs/microfrontends/47-FRONTEND-EVENT-BUS.md`\n * the MFE never sinks directly to Rybbit/audit — it goes through the\n * shell-owned bus.\n */\nimport { useCallback } from 'react';\nimport { useEventBus } from '@burdenoff/fe-libs/shared/events';\n\nexport type OrganizationDomainEvent =\n // Resource lifecycle (success)\n | 'organization.created'\n | 'organization.updated'\n | 'organization.deleted'\n | 'organization.invite.created'\n | 'organization.invite.accepted'\n | 'organization.invite.rejected'\n | 'organization.invite.cancelled'\n | 'organization.invite.resent'\n | 'member.added'\n | 'member.removed'\n | 'member.role_changed'\n // Failure / observability events forwarded to OtelBrowserSink + audit\n | 'organization.create_failed'\n | 'organization.update_failed'\n | 'organization.delete_failed'\n | 'organization.invite.create_failed'\n | 'organization.invite.accept_failed'\n | 'organization.invite.reject_failed'\n | 'organization.invite.cancel_failed'\n | 'organization.invite.resend_failed'\n | 'member.add_failed'\n | 'member.remove_failed'\n | 'member.role_change_failed'\n // Module-scoped (not resource-scoped) — uses the plural `organizations.`\n // prefix because it describes a navigation event into the module, not an\n // action on a single Organization entity.\n | 'organizations.page.viewed';\n\nexport interface OrganizationEventPayload {\n organizationId?: string;\n organizationName?: string;\n workspaceId?: string;\n inviteId?: string;\n memberId?: string;\n role?: string;\n count?: number;\n source?: string;\n // Observability fields (no PII per SRE guide §7)\n page?: string;\n durationMs?: number;\n errorCode?: string;\n errorMessage?: string;\n}\n\nexport function useOrganizationEventEmitter(): {\n emit: (event: OrganizationDomainEvent, payload?: OrganizationEventPayload) => void;\n} {\n const bus = useEventBus();\n // Memoize the emit callback so consumers (notably `useOrganizationPageView`)\n // can put it in effect dep arrays without firing on every render.\n const emit = useCallback(\n (event: OrganizationDomainEvent, payload: OrganizationEventPayload = {}) => {\n try {\n type DynamicEmit = (e: string, p: unknown) => void;\n (bus as unknown as { emit: DynamicEmit }).emit(event, payload);\n } catch {\n // Bus failures must not break organization workflows.\n }\n },\n [bus]\n );\n return { emit };\n}\n"],"mappings":";;;AAwDA,SAAgB,IAEd;CACA,IAAM,IAAM,GAAa;AAczB,QAAO,EAAE,MAXI,GACV,GAAgC,IAAoC,EAAE,KAAK;AAC1E,MAAI;AAED,KAAyC,KAAK,GAAO,EAAQ;UACxD;IAIV,CAAC,EAAI,CACN,EACc"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emits a single `organizations.page.viewed` event when the page mounts (and
|
|
3
|
+
* whenever the page identity changes). Mirrors the groups MFE pattern; the
|
|
4
|
+
* shell-owned event bus forwards this to OtelBrowserSink + audit.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useOrganizationPageView(page: string, extra?: {
|
|
7
|
+
organizationId?: string;
|
|
8
|
+
inviteId?: string;
|
|
9
|
+
workspaceId?: string;
|
|
10
|
+
}): void;
|
|
11
|
+
//# sourceMappingURL=useOrganizationPageView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOrganizationPageView.d.ts","sourceRoot":"","sources":["../../../src/organization-management/hooks/useOrganizationPageView.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,IAAI,CAQN"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useOrganizationEventEmitter as e } from "./useOrganizationEventEmitter.js";
|
|
2
|
+
import { useEffect as t } from "react";
|
|
3
|
+
//#region src/organization-management/hooks/useOrganizationPageView.ts
|
|
4
|
+
function n(n, r) {
|
|
5
|
+
let { emit: i } = e(), a = r?.organizationId, o = r?.inviteId, s = r?.workspaceId;
|
|
6
|
+
t(() => {
|
|
7
|
+
i("organizations.page.viewed", {
|
|
8
|
+
page: n,
|
|
9
|
+
organizationId: a,
|
|
10
|
+
inviteId: o,
|
|
11
|
+
workspaceId: s
|
|
12
|
+
});
|
|
13
|
+
}, [
|
|
14
|
+
i,
|
|
15
|
+
n,
|
|
16
|
+
a,
|
|
17
|
+
o,
|
|
18
|
+
s
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { n as useOrganizationPageView };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=useOrganizationPageView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOrganizationPageView.js","names":[],"sources":["../../../src/organization-management/hooks/useOrganizationPageView.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useOrganizationEventEmitter } from './useOrganizationEventEmitter';\n\n/**\n * Emits a single `organizations.page.viewed` event when the page mounts (and\n * whenever the page identity changes). Mirrors the groups MFE pattern; the\n * shell-owned event bus forwards this to OtelBrowserSink + audit.\n */\nexport function useOrganizationPageView(\n page: string,\n extra?: { organizationId?: string; inviteId?: string; workspaceId?: string }\n): void {\n const { emit } = useOrganizationEventEmitter();\n const organizationId = extra?.organizationId;\n const inviteId = extra?.inviteId;\n const workspaceId = extra?.workspaceId;\n useEffect(() => {\n emit('organizations.page.viewed', { page, organizationId, inviteId, workspaceId });\n }, [emit, page, organizationId, inviteId, workspaceId]);\n}\n"],"mappings":";;;AASA,SAAgB,EACd,GACA,GACM;CACN,IAAM,EAAE,YAAS,GAA6B,EACxC,IAAiB,GAAO,gBACxB,IAAW,GAAO,UAClB,IAAc,GAAO;AAC3B,SAAgB;AACd,IAAK,6BAA6B;GAAE;GAAM;GAAgB;GAAU;GAAa,CAAC;IACjF;EAAC;EAAM;EAAM;EAAgB;EAAU;EAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface InviteMemberFormProps {
|
|
2
|
+
organizationId: string;
|
|
3
|
+
onSubmit: (data: {
|
|
4
|
+
organizationId: string;
|
|
5
|
+
email: string;
|
|
6
|
+
message?: string;
|
|
7
|
+
}) => Promise<void>;
|
|
8
|
+
onCancel: () => void;
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Invite Member Form
|
|
13
|
+
* Email-based form for inviting users to an organization.
|
|
14
|
+
* Role defaults to MEMBER on the backend — admin can change it after the user joins.
|
|
15
|
+
*/
|
|
16
|
+
export declare function InviteMemberForm({ organizationId, onSubmit, onCancel, loading, }: InviteMemberFormProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=InviteMemberForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InviteMemberForm.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/components/InviteMemberForm.tsx"],"names":[],"mappings":"AAIA,UAAU,qBAAqB;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,qBAAqB,2CAiJvB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { useTr as e } from "../../../shared/hooks/useTr.js";
|
|
2
|
+
import { useState as t } from "react";
|
|
3
|
+
import { Loader2 as n, Mail as r, Send as i } from "lucide-react";
|
|
4
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
+
//#region src/organization-management/modules/members/components/InviteMemberForm.tsx
|
|
6
|
+
function s({ organizationId: s, onSubmit: c, onCancel: l, loading: u }) {
|
|
7
|
+
let d = e(), [f, p] = t({
|
|
8
|
+
email: "",
|
|
9
|
+
message: ""
|
|
10
|
+
});
|
|
11
|
+
return /* @__PURE__ */ o("form", {
|
|
12
|
+
onSubmit: async (e) => {
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
try {
|
|
15
|
+
await c({
|
|
16
|
+
organizationId: s,
|
|
17
|
+
email: f.email,
|
|
18
|
+
message: f.message || void 0
|
|
19
|
+
}), p({
|
|
20
|
+
email: "",
|
|
21
|
+
message: ""
|
|
22
|
+
});
|
|
23
|
+
} catch {}
|
|
24
|
+
},
|
|
25
|
+
className: "space-y-5",
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ o("div", { children: [
|
|
28
|
+
/* @__PURE__ */ o("label", {
|
|
29
|
+
htmlFor: "email",
|
|
30
|
+
className: "block text-sm font-medium text-[var(--color-text-primary)] mb-1",
|
|
31
|
+
children: [
|
|
32
|
+
d("members.invite.emailLabel", "Email Address"),
|
|
33
|
+
" ",
|
|
34
|
+
/* @__PURE__ */ a("span", {
|
|
35
|
+
className: "text-[var(--color-status-error-text)]",
|
|
36
|
+
children: "*"
|
|
37
|
+
})
|
|
38
|
+
]
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ o("div", {
|
|
41
|
+
className: "relative",
|
|
42
|
+
children: [/* @__PURE__ */ a("div", {
|
|
43
|
+
className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none",
|
|
44
|
+
children: /* @__PURE__ */ a(r, {
|
|
45
|
+
size: 16,
|
|
46
|
+
className: "text-[var(--color-text-muted)]"
|
|
47
|
+
})
|
|
48
|
+
}), /* @__PURE__ */ a("input", {
|
|
49
|
+
id: "email",
|
|
50
|
+
type: "email",
|
|
51
|
+
value: f.email,
|
|
52
|
+
onChange: (e) => p({
|
|
53
|
+
...f,
|
|
54
|
+
email: e.target.value
|
|
55
|
+
}),
|
|
56
|
+
className: "\n w-full pl-10 pr-4 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n ",
|
|
57
|
+
placeholder: d("members.invite.emailPlaceholder", "user@example.com"),
|
|
58
|
+
disabled: u,
|
|
59
|
+
required: !0
|
|
60
|
+
})]
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ a("p", {
|
|
63
|
+
className: "text-xs text-[var(--color-text-muted)] mt-1",
|
|
64
|
+
children: d("members.invite.emailHelp", "The user will be invited as a Member. You can change their role after they join.")
|
|
65
|
+
})
|
|
66
|
+
] }),
|
|
67
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("label", {
|
|
68
|
+
htmlFor: "message",
|
|
69
|
+
className: "block text-sm font-medium text-[var(--color-text-primary)] mb-1",
|
|
70
|
+
children: [
|
|
71
|
+
d("members.invite.messageLabel", "Personal Message"),
|
|
72
|
+
" ",
|
|
73
|
+
/* @__PURE__ */ o("span", {
|
|
74
|
+
className: "text-[var(--color-text-muted)]",
|
|
75
|
+
children: [
|
|
76
|
+
"(",
|
|
77
|
+
d("common.optional", "optional"),
|
|
78
|
+
")"
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
]
|
|
82
|
+
}), /* @__PURE__ */ a("textarea", {
|
|
83
|
+
id: "message",
|
|
84
|
+
value: f.message,
|
|
85
|
+
onChange: (e) => p({
|
|
86
|
+
...f,
|
|
87
|
+
message: e.target.value
|
|
88
|
+
}),
|
|
89
|
+
className: "\n w-full px-4 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n resize-none\n ",
|
|
90
|
+
placeholder: d("members.invite.messagePlaceholder", "Add a personal message to the invite..."),
|
|
91
|
+
rows: 3,
|
|
92
|
+
maxLength: 500,
|
|
93
|
+
disabled: u
|
|
94
|
+
})] }),
|
|
95
|
+
/* @__PURE__ */ o("div", {
|
|
96
|
+
className: "flex flex-col gap-3 border-t border-[var(--color-border-default)] pt-4 sm:flex-row",
|
|
97
|
+
children: [/* @__PURE__ */ o("button", {
|
|
98
|
+
type: "submit",
|
|
99
|
+
disabled: u,
|
|
100
|
+
className: "\n inline-flex items-center gap-2 px-6 py-2.5\n bg-[var(--color-action-primary-bg)]\n text-[var(--color-action-primary-text)]\n rounded-lg\n hover:opacity-90 hover:scale-[1.02]\n active:scale-[0.98]\n transition-all duration-200\n font-medium\n disabled:opacity-50 disabled:cursor-not-allowed\n sm:min-w-[180px]\n ",
|
|
101
|
+
children: [u ? /* @__PURE__ */ a(n, {
|
|
102
|
+
size: 16,
|
|
103
|
+
className: "animate-spin"
|
|
104
|
+
}) : /* @__PURE__ */ a(i, { size: 16 }), d("members.invite.send", "Send Invite")]
|
|
105
|
+
}), /* @__PURE__ */ a("button", {
|
|
106
|
+
type: "button",
|
|
107
|
+
onClick: l,
|
|
108
|
+
disabled: u,
|
|
109
|
+
className: "\n px-6 py-2.5\n bg-transparent\n text-[var(--color-text-primary)]\n border border-[var(--color-border-default)]\n rounded-lg\n hover:bg-[var(--color-bg-subtle)]\n active:scale-[0.98]\n transition-all duration-200\n font-medium\n disabled:opacity-50 disabled:cursor-not-allowed\n sm:min-w-[140px]\n ",
|
|
110
|
+
children: d("common.cancel", "Cancel")
|
|
111
|
+
})]
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//#endregion
|
|
117
|
+
export { s as InviteMemberForm };
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=InviteMemberForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InviteMemberForm.js","names":[],"sources":["../../../../../src/organization-management/modules/members/components/InviteMemberForm.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Loader2, Mail, Send } from 'lucide-react';\nimport { useTr } from '../../../shared/hooks/useTr';\n\ninterface InviteMemberFormProps {\n organizationId: string;\n onSubmit: (data: { organizationId: string; email: string; message?: string }) => Promise<void>;\n onCancel: () => void;\n loading?: boolean;\n}\n\n/**\n * Invite Member Form\n * Email-based form for inviting users to an organization.\n * Role defaults to MEMBER on the backend — admin can change it after the user joins.\n */\nexport function InviteMemberForm({\n organizationId,\n onSubmit,\n onCancel,\n loading,\n}: InviteMemberFormProps) {\n const tr = useTr();\n const [formData, setFormData] = useState({\n email: '',\n message: '',\n });\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n try {\n await onSubmit({\n organizationId,\n email: formData.email,\n message: formData.message || undefined,\n });\n setFormData({ email: '', message: '' });\n } catch {\n // Error is surfaced by the parent page via the mutation hook's error state\n }\n };\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n {/* Email */}\n <div>\n <label\n htmlFor=\"email\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('members.invite.emailLabel', 'Email Address')}{' '}\n <span className=\"text-[var(--color-status-error-text)]\">*</span>\n </label>\n <div className=\"relative\">\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <Mail size={16} className=\"text-[var(--color-text-muted)]\" />\n </div>\n <input\n id=\"email\"\n type=\"email\"\n value={formData.email}\n onChange={(e) => setFormData({ ...formData, email: e.target.value })}\n className=\"\n w-full pl-10 pr-4 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder={tr('members.invite.emailPlaceholder', 'user@example.com')}\n disabled={loading}\n required\n />\n </div>\n <p className=\"text-xs text-[var(--color-text-muted)] mt-1\">\n {tr(\n 'members.invite.emailHelp',\n 'The user will be invited as a Member. You can change their role after they join.'\n )}\n </p>\n </div>\n\n {/* Message (optional) */}\n <div>\n <label\n htmlFor=\"message\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('members.invite.messageLabel', 'Personal Message')}{' '}\n <span className=\"text-[var(--color-text-muted)]\">\n ({tr('common.optional', 'optional')})\n </span>\n </label>\n <textarea\n id=\"message\"\n value={formData.message}\n onChange={(e) => setFormData({ ...formData, message: e.target.value })}\n className=\"\n w-full px-4 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n resize-none\n \"\n placeholder={tr(\n 'members.invite.messagePlaceholder',\n 'Add a personal message to the invite...'\n )}\n rows={3}\n maxLength={500}\n disabled={loading}\n />\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-col gap-3 border-t border-[var(--color-border-default)] pt-4 sm:flex-row\">\n <button\n type=\"submit\"\n disabled={loading}\n className=\"\n inline-flex items-center gap-2 px-6 py-2.5\n bg-[var(--color-action-primary-bg)]\n text-[var(--color-action-primary-text)]\n rounded-lg\n hover:opacity-90 hover:scale-[1.02]\n active:scale-[0.98]\n transition-all duration-200\n font-medium\n disabled:opacity-50 disabled:cursor-not-allowed\n sm:min-w-[180px]\n \"\n >\n {loading ? <Loader2 size={16} className=\"animate-spin\" /> : <Send size={16} />}\n {tr('members.invite.send', 'Send Invite')}\n </button>\n\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={loading}\n className=\"\n px-6 py-2.5\n bg-transparent\n text-[var(--color-text-primary)]\n border border-[var(--color-border-default)]\n rounded-lg\n hover:bg-[var(--color-bg-subtle)]\n active:scale-[0.98]\n transition-all duration-200\n font-medium\n disabled:opacity-50 disabled:cursor-not-allowed\n sm:min-w-[140px]\n \"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n </div>\n </form>\n );\n}\n"],"mappings":";;;;;AAgBA,SAAgB,EAAiB,EAC/B,mBACA,aACA,aACA,cACwB;CACxB,IAAM,IAAK,GAAO,EACZ,CAAC,GAAU,KAAe,EAAS;EACvC,OAAO;EACP,SAAS;EACV,CAAC;AAgBF,QACE,kBAAC,QAAD;EAAM,UAfa,OAAO,MAAuB;AACjD,KAAE,gBAAgB;AAClB,OAAI;AAMF,IALA,MAAM,EAAS;KACb;KACA,OAAO,EAAS;KAChB,SAAS,EAAS,WAAW,KAAA;KAC9B,CAAC,EACF,EAAY;KAAE,OAAO;KAAI,SAAS;KAAI,CAAC;WACjC;;EAMsB,WAAU;YAAxC;GAEE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,SAAD;KACE,SAAQ;KACR,WAAU;eAFZ;MAIG,EAAG,6BAA6B,gBAAgB;MAAE;MACnD,kBAAC,QAAD;OAAM,WAAU;iBAAwC;OAAQ,CAAA;MAC1D;;IACR,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OAAM,MAAM;OAAI,WAAU;OAAmC,CAAA;MACzD,CAAA,EACN,kBAAC,SAAD;MACE,IAAG;MACH,MAAK;MACL,OAAO,EAAS;MAChB,WAAW,MAAM,EAAY;OAAE,GAAG;OAAU,OAAO,EAAE,OAAO;OAAO,CAAC;MACpE,WAAU;MAUV,aAAa,EAAG,mCAAmC,mBAAmB;MACtE,UAAU;MACV,UAAA;MACA,CAAA,CACE;;IACN,kBAAC,KAAD;KAAG,WAAU;eACV,EACC,4BACA,mFACD;KACC,CAAA;IACA,EAAA,CAAA;GAGN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;IACE,SAAQ;IACR,WAAU;cAFZ;KAIG,EAAG,+BAA+B,mBAAmB;KAAE;KACxD,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OAAiD;OAC7C,EAAG,mBAAmB,WAAW;OAAC;OAC/B;;KACD;OACR,kBAAC,YAAD;IACE,IAAG;IACH,OAAO,EAAS;IAChB,WAAW,MAAM,EAAY;KAAE,GAAG;KAAU,SAAS,EAAE,OAAO;KAAO,CAAC;IACtE,WAAU;IAWV,aAAa,EACX,qCACA,0CACD;IACD,MAAM;IACN,WAAW;IACX,UAAU;IACV,CAAA,CACE,EAAA,CAAA;GAGN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,UAAD;KACE,MAAK;KACL,UAAU;KACV,WAAU;eAHZ,CAgBG,IAAU,kBAAC,GAAD;MAAS,MAAM;MAAI,WAAU;MAAiB,CAAA,GAAG,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA,EAC7E,EAAG,uBAAuB,cAAc,CAClC;QAET,kBAAC,UAAD;KACE,MAAK;KACL,SAAS;KACT,UAAU;KACV,WAAU;eAcT,EAAG,iBAAiB,SAAS;KACvB,CAAA,CACL;;GACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InviteStatusBadge.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/components/InviteStatusBadge.tsx"],"names":[],"mappings":"AAIA,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AA2CD,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2CAoBnE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useCallback as e } from "react";
|
|
2
|
+
import { AlertTriangle as t, Ban as n, Check as r, Clock as i, X as a } from "lucide-react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
5
|
+
//#region src/organization-management/modules/members/components/InviteStatusBadge.tsx
|
|
6
|
+
var l = {
|
|
7
|
+
PENDING: {
|
|
8
|
+
labelKey: "members.inviteStatus.pending",
|
|
9
|
+
defaultLabel: "Pending",
|
|
10
|
+
className: "bg-[var(--color-status-warning-bgSubtle)] text-[var(--color-status-warning-text)] border border-[var(--color-status-warning-border)]",
|
|
11
|
+
icon: i
|
|
12
|
+
},
|
|
13
|
+
ACCEPTED: {
|
|
14
|
+
labelKey: "members.inviteStatus.accepted",
|
|
15
|
+
defaultLabel: "Accepted",
|
|
16
|
+
className: "bg-[var(--color-status-success-bgSubtle)] text-[var(--color-status-success-text)] border border-[var(--color-status-success-border)]",
|
|
17
|
+
icon: r
|
|
18
|
+
},
|
|
19
|
+
REJECTED: {
|
|
20
|
+
labelKey: "members.inviteStatus.rejected",
|
|
21
|
+
defaultLabel: "Rejected",
|
|
22
|
+
className: "bg-[var(--color-status-error-bgSubtle)] text-[var(--color-status-error-text)] border border-[var(--color-status-error-border)]",
|
|
23
|
+
icon: a
|
|
24
|
+
},
|
|
25
|
+
EXPIRED: {
|
|
26
|
+
labelKey: "members.inviteStatus.expired",
|
|
27
|
+
defaultLabel: "Expired",
|
|
28
|
+
className: "bg-[var(--color-bg-muted)] text-[var(--color-text-secondary)] border border-[var(--color-border-default)]",
|
|
29
|
+
icon: t
|
|
30
|
+
},
|
|
31
|
+
CANCELLED: {
|
|
32
|
+
labelKey: "members.inviteStatus.cancelled",
|
|
33
|
+
defaultLabel: "Cancelled",
|
|
34
|
+
className: "bg-[var(--color-bg-muted)] text-[var(--color-text-secondary)] border border-[var(--color-border-default)]",
|
|
35
|
+
icon: n
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
function u({ status: t }) {
|
|
39
|
+
let { t: n } = c(), r = e((e, t) => {
|
|
40
|
+
let r = n(e);
|
|
41
|
+
return r === e ? t : r;
|
|
42
|
+
}, [n]), i = l[t] ?? l.PENDING, a = i.icon;
|
|
43
|
+
return /* @__PURE__ */ s("span", {
|
|
44
|
+
className: `inline-flex items-center gap-1 px-2.5 py-0.5 rounded-full text-xs font-medium ${i.className}`,
|
|
45
|
+
children: [/* @__PURE__ */ o(a, { size: 12 }), r(i.labelKey, i.defaultLabel)]
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { u as InviteStatusBadge };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=InviteStatusBadge.js.map
|