@burdenoff/microfe-organization 2026.1013.2 → 2026.1101.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/global-operations.js +57 -58
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.js +1 -2
- package/dist/generated/global-types.js.map +1 -1
- package/dist/node_modules/sonner/dist/index.js +2 -3
- package/dist/node_modules/sonner/dist/index.js.map +1 -1
- package/dist/node_modules/zod/v4/classic/errors.js +44 -0
- package/dist/node_modules/zod/v4/classic/errors.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/parse.js +7 -0
- package/dist/node_modules/zod/v4/classic/parse.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/schemas.js +652 -0
- package/dist/node_modules/zod/v4/classic/schemas.js.map +1 -0
- package/dist/node_modules/zod/v4/core/api.js +429 -0
- package/dist/node_modules/zod/v4/core/api.js.map +1 -0
- package/dist/node_modules/zod/v4/core/checks.js +143 -0
- package/dist/node_modules/zod/v4/core/checks.js.map +1 -0
- package/dist/node_modules/zod/v4/core/core.js +84 -0
- package/dist/node_modules/zod/v4/core/core.js.map +1 -0
- package/dist/node_modules/zod/v4/core/doc.js +29 -0
- package/dist/node_modules/zod/v4/core/doc.js.map +1 -0
- package/dist/node_modules/zod/v4/core/errors.js +90 -0
- package/dist/node_modules/zod/v4/core/errors.js.map +1 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.js +285 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +1 -0
- package/dist/node_modules/zod/v4/core/memoizer.js +188 -0
- package/dist/node_modules/zod/v4/core/memoizer.js.map +1 -0
- package/dist/node_modules/zod/v4/core/parse.js +159 -0
- package/dist/node_modules/zod/v4/core/parse.js.map +1 -0
- package/dist/node_modules/zod/v4/core/regexes.js +34 -0
- package/dist/node_modules/zod/v4/core/regexes.js.map +1 -0
- package/dist/node_modules/zod/v4/core/registries.js +41 -0
- package/dist/node_modules/zod/v4/core/registries.js.map +1 -0
- package/dist/node_modules/zod/v4/core/schemas.js +979 -0
- package/dist/node_modules/zod/v4/core/schemas.js.map +1 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.js +330 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
- package/dist/node_modules/zod/v4/core/util.js +417 -0
- package/dist/node_modules/zod/v4/core/util.js.map +1 -0
- package/dist/node_modules/zod/v4/core/versions.js +9 -0
- package/dist/node_modules/zod/v4/core/versions.js.map +1 -0
- package/dist/node_modules/zod/v4/locales/en.js +96 -0
- package/dist/node_modules/zod/v4/locales/en.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.js +13 -10
- package/dist/organization-management/AdminOrganizationRoot.js.map +1 -1
- package/dist/organization-management/AdminOrganizationRoutes.js +53 -47
- package/dist/organization-management/AdminOrganizationRoutes.js.map +1 -1
- package/dist/organization-management/UserOrganizationRoot.js +13 -10
- package/dist/organization-management/UserOrganizationRoot.js.map +1 -1
- package/dist/organization-management/UserOrganizationRoutes.js +52 -46
- package/dist/organization-management/UserOrganizationRoutes.js.map +1 -1
- package/dist/organization-management/constants/permissions.js +1 -2
- package/dist/organization-management/constants/permissions.js.map +1 -1
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js +1 -2
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js.map +1 -1
- package/dist/organization-management/hooks/useOrganizationPageView.js +1 -2
- package/dist/organization-management/hooks/useOrganizationPageView.js.map +1 -1
- package/dist/organization-management/modules/members/components/BulkInviteForm.js +3 -3
- package/dist/organization-management/modules/members/components/BulkInviteForm.js.map +1 -1
- package/dist/organization-management/modules/members/components/InviteMemberForm.js +1 -2
- package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -1
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js +1 -2
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js +1 -2
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js.map +1 -1
- package/dist/organization-management/modules/members/components/MyInviteCard.js +5 -6
- package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -1
- package/dist/organization-management/modules/members/components/PendingInvitesList.js +8 -9
- package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -1
- package/dist/organization-management/modules/members/hooks/useInvites.js +2 -3
- package/dist/organization-management/modules/members/hooks/useInvites.js.map +1 -1
- package/dist/organization-management/modules/members/hooks/useMembers.js +1 -2
- package/dist/organization-management/modules/members/hooks/useMembers.js.map +1 -1
- package/dist/organization-management/modules/members/hooks/useWorkspaceInvites.js +1 -2
- package/dist/organization-management/modules/members/hooks/useWorkspaceInvites.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js +16 -17
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js +14 -15
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +18 -19
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MembersListPage.js +142 -143
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +168 -169
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js +13 -14
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js.map +1 -1
- package/dist/organization-management/modules/members/utils/bulkInviteCsv.js +4 -10
- package/dist/organization-management/modules/members/utils/bulkInviteCsv.js.map +1 -1
- package/dist/organization-management/modules/members/utils/workspaceInvitationDisplay.js +1 -2
- package/dist/organization-management/modules/members/utils/workspaceInvitationDisplay.js.map +1 -1
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js +14 -15
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -1
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +1 -2
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js +2 -3
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js.map +1 -1
- package/dist/organization-management/modules/organizations/hooks/useOrgsWithPermission.js +22 -21
- package/dist/organization-management/modules/organizations/hooks/useOrgsWithPermission.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +18 -19
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +29 -30
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +14 -15
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +33 -34
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/schemas/index.js +11 -12
- package/dist/organization-management/modules/organizations/schemas/index.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js +16 -24
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +5 -6
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +31 -32
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +1 -2
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js +1 -2
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js.map +1 -1
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js +11 -12
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +18 -19
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +43 -44
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +19 -20
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +240 -241
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/schemas/index.js +6 -7
- package/dist/organization-management/modules/workspaces/schemas/index.js.map +1 -1
- package/dist/organization-management/providers/OrgConsoleProvider.js +1 -2
- package/dist/organization-management/providers/OrgConsoleProvider.js.map +1 -1
- package/dist/organization-management/providers/OrgScopedPermissions.js +1 -2
- package/dist/organization-management/providers/OrgScopedPermissions.js.map +1 -1
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js +1 -2
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js.map +1 -1
- package/dist/organization-management/shared/components/dialog/ConfirmDialogView.js +1 -2
- package/dist/organization-management/shared/components/dialog/ConfirmDialogView.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/ErrorState.js +1 -2
- package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -1
- package/dist/organization-management/shared/components/feedback/LoadingState.js +1 -2
- package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -1
- package/dist/organization-management/shared/components/input/SearchInput.js +1 -2
- package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -1
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js +1 -2
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js.map +1 -1
- package/dist/organization-management/shared/hooks/useDebouncedValue.js +1 -2
- package/dist/organization-management/shared/hooks/useDebouncedValue.js.map +1 -1
- package/dist/organization-management/shared/hooks/useTr.js +1 -2
- package/dist/organization-management/shared/hooks/useTr.js.map +1 -1
- package/dist/organization-management/shared/logger.js +1 -2
- package/dist/organization-management/shared/logger.js.map +1 -1
- package/dist/organization-management/shared/recaptcha.js +1 -2
- package/dist/organization-management/shared/recaptcha.js.map +1 -1
- package/dist/organization-management/shared/types/graphql.js +1 -2
- package/dist/organization-management/shared/types/graphql.js.map +1 -1
- package/dist/utils/nativeBridge.js +1 -2
- package/package.json +7 -6
- package/dist/node_modules/zod/v3/ZodError.js +0 -82
- package/dist/node_modules/zod/v3/ZodError.js.map +0 -1
- package/dist/node_modules/zod/v3/errors.js +0 -10
- package/dist/node_modules/zod/v3/errors.js.map +0 -1
- package/dist/node_modules/zod/v3/helpers/errorUtil.js +0 -9
- package/dist/node_modules/zod/v3/helpers/errorUtil.js.map +0 -1
- package/dist/node_modules/zod/v3/helpers/parseUtil.js +0 -93
- package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +0 -1
- package/dist/node_modules/zod/v3/helpers/util.js +0 -76
- package/dist/node_modules/zod/v3/helpers/util.js.map +0 -1
- package/dist/node_modules/zod/v3/locales/en.js +0 -62
- package/dist/node_modules/zod/v3/locales/en.js.map +0 -1
- package/dist/node_modules/zod/v3/types.js +0 -2441
- package/dist/node_modules/zod/v3/types.js.map +0 -1
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { OrgConsoleProvider as e } from "./providers/OrgConsoleProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { AdminOrganizationRoutes as t } from "./AdminOrganizationRoutes.js";
|
|
3
|
+
import { useTr as n } from "./shared/hooks/useTr.js";
|
|
4
4
|
import { useEffect as r } from "react";
|
|
5
5
|
import { Briefcase as i, Building as a, Mail as o, Users as s } from "lucide-react";
|
|
6
6
|
import { Toaster as c } from "@burdenoff/fe-libs/ui";
|
|
7
7
|
import { FeatureFlagProvider as l } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
8
8
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
|
-
|
|
9
|
+
// src/organization-management/AdminOrganizationRoot.tsx
|
|
10
10
|
var f = (f) => {
|
|
11
|
-
let { registerNavItems: p, registerFooterItems: m, basePath: h = "/organizations", renderToaster: g = !1 } = f, _ =
|
|
11
|
+
let { registerNavItems: p, registerFooterItems: m, basePath: h = "/organizations", renderToaster: g = !1 } = f, _ = n(), v = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
12
12
|
return r(() => {
|
|
13
|
-
if (p) return
|
|
13
|
+
if (!p) return;
|
|
14
|
+
let e = [
|
|
14
15
|
{
|
|
15
16
|
id: "admin-org-organizations",
|
|
16
17
|
label: _("nav.organizations", "Organizations"),
|
|
@@ -43,26 +44,29 @@ var f = (f) => {
|
|
|
43
44
|
order: 60,
|
|
44
45
|
group: "globalconsole"
|
|
45
46
|
}
|
|
46
|
-
]
|
|
47
|
+
];
|
|
48
|
+
return p(e);
|
|
47
49
|
}, [
|
|
48
50
|
p,
|
|
49
51
|
h,
|
|
50
52
|
_
|
|
51
53
|
]), r(() => {
|
|
52
|
-
if (m) return
|
|
54
|
+
if (!m) return;
|
|
55
|
+
let e = [{
|
|
53
56
|
id: "organization-management-version",
|
|
54
57
|
label: _("footer.adminVersion", "Organization Management v0.1.0"),
|
|
55
58
|
type: "status",
|
|
56
59
|
order: 30,
|
|
57
60
|
section: "left"
|
|
58
|
-
}]
|
|
61
|
+
}];
|
|
62
|
+
return m(e);
|
|
59
63
|
}, [m, _]), /* @__PURE__ */ u(l, {
|
|
60
64
|
workspaceId: null,
|
|
61
65
|
gateway: "global",
|
|
62
66
|
defaultEnabled: !0,
|
|
63
67
|
children: /* @__PURE__ */ d(e, {
|
|
64
68
|
...f,
|
|
65
|
-
children: [/* @__PURE__ */ u(
|
|
69
|
+
children: [/* @__PURE__ */ u(t, {}), g && /* @__PURE__ */ u(c, {
|
|
66
70
|
position: "top-right",
|
|
67
71
|
richColors: !0,
|
|
68
72
|
closeButton: !0
|
|
@@ -70,7 +74,6 @@ var f = (f) => {
|
|
|
70
74
|
})
|
|
71
75
|
});
|
|
72
76
|
};
|
|
73
|
-
//#endregion
|
|
74
77
|
export { f as AdminOrganizationRoot };
|
|
75
78
|
|
|
76
79
|
//# sourceMappingURL=AdminOrganizationRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminOrganizationRoot.js","names":[],"sources":["../../src/organization-management/AdminOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building, Briefcase, Mail, Users } 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 { AdminOrganizationRoutes } from './AdminOrganizationRoutes';\nimport { useTr } from './shared/hooks/useTr';\n\n/**\n * AdminOrganizationRoot\n *\n * Full-capability root for the organization management MFE, intended to\n * be mounted inside the admin application. Exposes organizations,\n * workspaces, members, and invites management — registering nav items\n * for each top-level surface with IDs prefixed `admin-org-*`.\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 AdminOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {\n registerNavItems,\n registerFooterItems,\n basePath = '/organizations',\n renderToaster = false,\n } = props;\n const tr = useTr();\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: 'admin-org-organizations',\n label: tr('nav.organizations', 'Organizations'),\n path: basePath,\n icon: <Building size={20} />,\n order: 30,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-workspaces',\n label: tr('nav.workspaces', 'Workspaces'),\n path: joinPath(basePath, '/workspaces'),\n icon: <Briefcase size={20} />,\n order: 40,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-members',\n label: tr('nav.members', 'Members'),\n // Members are accessed through org detail pages; point at orgs\n // list so admins have a discoverable entry point in the\n // top-level nav.\n path: basePath,\n icon: <Users size={20} />,\n order: 50,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-invites',\n label: tr('nav.myInvites', 'My Invites'),\n path: joinPath(basePath, '/invites'),\n icon: <Mail size={20} />,\n order: 60,\n group: 'globalconsole',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'organization-management-version',\n label: tr('footer.adminVersion', 'Organization Management 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, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <AdminOrganizationRoutes />\n {renderToaster && <Toaster position=\"top-right\" richColors closeButton />}\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;AAqBA,
|
|
1
|
+
{"version":3,"file":"AdminOrganizationRoot.js","names":["AdminOrganizationRoot","props","tr","useTr","joinPath","base","path","useEffect","registerNavItems","navItems","basePath","Building","Briefcase","Users","Mail","registerFooterItems","footerItems","FeatureFlagProvider","OrgConsoleProvider","AdminOrganizationRoutes","renderToaster","Toaster"],"sources":["../../src/organization-management/AdminOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building, Briefcase, Mail, Users } 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 { AdminOrganizationRoutes } from './AdminOrganizationRoutes';\nimport { useTr } from './shared/hooks/useTr';\n\n/**\n * AdminOrganizationRoot\n *\n * Full-capability root for the organization management MFE, intended to\n * be mounted inside the admin application. Exposes organizations,\n * workspaces, members, and invites management — registering nav items\n * for each top-level surface with IDs prefixed `admin-org-*`.\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 AdminOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {\n registerNavItems,\n registerFooterItems,\n basePath = '/organizations',\n renderToaster = false,\n } = props;\n const tr = useTr();\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: 'admin-org-organizations',\n label: tr('nav.organizations', 'Organizations'),\n path: basePath,\n icon: <Building size={20} />,\n order: 30,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-workspaces',\n label: tr('nav.workspaces', 'Workspaces'),\n path: joinPath(basePath, '/workspaces'),\n icon: <Briefcase size={20} />,\n order: 40,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-members',\n label: tr('nav.members', 'Members'),\n // Members are accessed through org detail pages; point at orgs\n // list so admins have a discoverable entry point in the\n // top-level nav.\n path: basePath,\n icon: <Users size={20} />,\n order: 50,\n group: 'globalconsole',\n },\n {\n id: 'admin-org-invites',\n label: tr('nav.myInvites', 'My Invites'),\n path: joinPath(basePath, '/invites'),\n icon: <Mail size={20} />,\n order: 60,\n group: 'globalconsole',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'organization-management-version',\n label: tr('footer.adminVersion', 'Organization Management 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, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <AdminOrganizationRoutes />\n {renderToaster && <Toaster position=\"top-right\" richColors closeButton />}\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;AAqBA,IAAaA,KAAoD,MAAU;CACzE,IAAM,EACJ,qBACA,wBACA,cAAW,kBACX,mBAAgB,OACdC,GACEC,IAAKC,EAAM,GAEXC,KAAY,GAAc,OACZC,EAAK,SAAS,GAAG,IAAIA,EAAK,MAAM,GAAG,EAAE,IAAIA,MACzCC,EAAK,WAAW,GAAG,IAAIA,IAAO,IAAIA;CAkEtD,OA9DAC,QAAgB;EACd,IAAI,CAACC,GAAkB;EAEvB,IAAMC,IAAsB;GAC1B;IACE,IAAI;IACJ,OAAOP,EAAG,qBAAqB,eAAe;IAC9C,MAAMQ;IACN,MAAM,kBAACC,GAAD,EAAU,MAAM,GAAK,CAAA;IAC3B,OAAO;IACP,OAAO;GACT;GACA;IACE,IAAI;IACJ,OAAOT,EAAG,kBAAkB,YAAY;IACxC,MAAME,EAASM,GAAU,aAAa;IACtC,MAAM,kBAACE,GAAD,EAAW,MAAM,GAAK,CAAA;IAC5B,OAAO;IACP,OAAO;GACT;GACA;IACE,IAAI;IACJ,OAAOV,EAAG,eAAe,SAAS;IAIlC,MAAMQ;IACN,MAAM,kBAACG,GAAD,EAAO,MAAM,GAAK,CAAA;IACxB,OAAO;IACP,OAAO;GACT;GACA;IACE,IAAI;IACJ,OAAOX,EAAG,iBAAiB,YAAY;IACvC,MAAME,EAASM,GAAU,UAAU;IACnC,MAAM,kBAACI,GAAD,EAAM,MAAM,GAAK,CAAA;IACvB,OAAO;IACP,OAAO;GACT;EACF;EAGA,OADgBN,EAAiBC,CAC1B;CACT,GAAG;EAACD;EAAkBE;EAAUR;CAAE,CAAC,GAEnCK,QAAgB;EACd,IAAI,CAACQ,GAAqB;EAE1B,IAAMC,IAAc,CAClB;GACE,IAAI;GACJ,OAAOd,EAAG,uBAAuB,gCAAgC;GACjE,MAAM;GACN,OAAO;GACP,SAAS;EACX,CACF;EAGA,OADgBa,EAAoBC,CAC7B;CACT,GAAG,CAACD,GAAqBb,CAAE,CAAC,GAG1B,kBAACe,GAAD;EAAqB,aAAa;EAAM,SAAQ;EAAS,gBAAgB;EACvE,UAAA,kBAACC,GAAD;GAAoB,GAAIjB;GAAxB,UAAA,CACE,kBAACkB,GAAD,CAA0B,CAAA,GACzBC,KAAiB,kBAACC,GAAD;IAAS,UAAS;IAAY,YAAA;IAAW,aAAA;GAAa,CAAA,CACtD;;CACD,CAAA;AAEzB"}
|
|
@@ -1,94 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { OrgScopedPermissions as e } from "./providers/OrgScopedPermissions.js";
|
|
2
|
+
import { OrganizationsListPage as t } from "./modules/organizations/pages/OrganizationsListPage.js";
|
|
3
3
|
import { Suspense as n, lazy as r } from "react";
|
|
4
4
|
import { useFeatureFlagDetails as i } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
5
5
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
function
|
|
10
|
-
let n =
|
|
11
|
-
return n ? /* @__PURE__ */ a(
|
|
6
|
+
import { Navigate as s, Outlet as c, Route as l, Routes as u, useParams as d } from "react-router";
|
|
7
|
+
// src/organization-management/AdminOrganizationRoutes.tsx
|
|
8
|
+
var f = r(() => import("./modules/organizations/pages/OrganizationCreatePage.js").then((e) => ({ default: e.OrganizationCreatePage }))), p = r(() => import("./modules/organizations/pages/OrganizationDetailPage.js").then((e) => ({ default: e.OrganizationDetailPage }))), m = r(() => import("./modules/organizations/pages/OrganizationEditPage.js").then((e) => ({ default: e.OrganizationEditPage }))), h = r(() => import("./modules/workspaces/pages/WorkspacesListPage.js").then((e) => ({ default: e.WorkspacesListPage }))), g = r(() => import("./modules/workspaces/pages/WorkspaceCreatePage.js").then((e) => ({ default: e.WorkspaceCreatePage }))), _ = r(() => import("./modules/workspaces/pages/WorkspaceDetailPage.js").then((e) => ({ default: e.WorkspaceDetailPage }))), v = r(() => import("./modules/workspaces/pages/WorkspaceEditPage.js").then((e) => ({ default: e.WorkspaceEditPage }))), y = r(() => import("./modules/members/pages/MembersListPage.js").then((e) => ({ default: e.MembersListPage }))), b = r(() => import("./modules/members/pages/MemberDetailPage.js").then((e) => ({ default: e.MemberDetailPage }))), x = r(() => import("./modules/members/pages/InviteMemberPage.js").then((e) => ({ default: e.InviteMemberPage }))), S = r(() => import("./modules/members/pages/MyInvitesPage.js").then((e) => ({ default: e.MyInvitesPage })));
|
|
9
|
+
function C({ paramName: t }) {
|
|
10
|
+
let n = d()[t];
|
|
11
|
+
return n ? /* @__PURE__ */ a(e, {
|
|
12
12
|
organizationId: n,
|
|
13
|
-
children: /* @__PURE__ */ a(
|
|
14
|
-
}) : /* @__PURE__ */ a(
|
|
13
|
+
children: /* @__PURE__ */ a(c, {})
|
|
14
|
+
}) : /* @__PURE__ */ a(c, {});
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function w() {
|
|
17
17
|
return /* @__PURE__ */ a("div", {
|
|
18
18
|
className: "flex items-center justify-center min-h-[200px]",
|
|
19
19
|
children: /* @__PURE__ */ a("div", { className: "size-8 animate-spin rounded-full border-2 border-[var(--color-border-default)] border-t-[var(--color-action-primary-bg)]" })
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
let
|
|
22
|
+
function T() {
|
|
23
|
+
let e = i("organization.create"), r = i("organization.invite"), c = !e || !!e.value, d = !r || !!r.value;
|
|
24
24
|
return /* @__PURE__ */ a(n, {
|
|
25
|
-
fallback: /* @__PURE__ */ a(
|
|
26
|
-
children: /* @__PURE__ */ o(
|
|
27
|
-
/* @__PURE__ */ a(
|
|
25
|
+
fallback: /* @__PURE__ */ a(w, {}),
|
|
26
|
+
children: /* @__PURE__ */ o(u, { children: [
|
|
27
|
+
/* @__PURE__ */ a(l, {
|
|
28
28
|
index: !0,
|
|
29
|
-
element: /* @__PURE__ */ a(
|
|
29
|
+
element: /* @__PURE__ */ a(t, { mode: "admin" })
|
|
30
30
|
}),
|
|
31
|
-
|
|
31
|
+
/* @__PURE__ */ a(l, {
|
|
32
|
+
path: "list",
|
|
33
|
+
element: /* @__PURE__ */ a(s, {
|
|
34
|
+
to: "..",
|
|
35
|
+
replace: !0
|
|
36
|
+
})
|
|
37
|
+
}),
|
|
38
|
+
c && /* @__PURE__ */ a(l, {
|
|
32
39
|
path: "new",
|
|
33
|
-
element: /* @__PURE__ */ a(
|
|
40
|
+
element: /* @__PURE__ */ a(f, {})
|
|
34
41
|
}),
|
|
35
|
-
/* @__PURE__ */ o(
|
|
42
|
+
/* @__PURE__ */ o(l, {
|
|
36
43
|
path: ":id",
|
|
37
|
-
element: /* @__PURE__ */ a(
|
|
38
|
-
children: [/* @__PURE__ */ a(
|
|
44
|
+
element: /* @__PURE__ */ a(C, { paramName: "id" }),
|
|
45
|
+
children: [/* @__PURE__ */ a(l, {
|
|
39
46
|
index: !0,
|
|
40
|
-
element: /* @__PURE__ */ a(f, {})
|
|
41
|
-
}), /* @__PURE__ */ a(c, {
|
|
42
|
-
path: "edit",
|
|
43
47
|
element: /* @__PURE__ */ a(p, {})
|
|
48
|
+
}), /* @__PURE__ */ a(l, {
|
|
49
|
+
path: "edit",
|
|
50
|
+
element: /* @__PURE__ */ a(m, {})
|
|
44
51
|
})]
|
|
45
52
|
}),
|
|
46
|
-
/* @__PURE__ */ a(
|
|
53
|
+
/* @__PURE__ */ a(l, {
|
|
47
54
|
path: "workspaces",
|
|
48
|
-
element: /* @__PURE__ */ a(
|
|
55
|
+
element: /* @__PURE__ */ a(h, { mode: "admin" })
|
|
49
56
|
}),
|
|
50
|
-
/* @__PURE__ */ a(
|
|
57
|
+
/* @__PURE__ */ a(l, {
|
|
51
58
|
path: "workspaces/new",
|
|
52
|
-
element: /* @__PURE__ */ a(
|
|
59
|
+
element: /* @__PURE__ */ a(g, {})
|
|
53
60
|
}),
|
|
54
|
-
/* @__PURE__ */ a(
|
|
61
|
+
/* @__PURE__ */ a(l, {
|
|
55
62
|
path: "workspaces/:id",
|
|
56
|
-
element: /* @__PURE__ */ a(
|
|
63
|
+
element: /* @__PURE__ */ a(_, {})
|
|
57
64
|
}),
|
|
58
|
-
/* @__PURE__ */ a(
|
|
65
|
+
/* @__PURE__ */ a(l, {
|
|
59
66
|
path: "workspaces/:id/edit",
|
|
60
|
-
element: /* @__PURE__ */ a(
|
|
67
|
+
element: /* @__PURE__ */ a(v, {})
|
|
61
68
|
}),
|
|
62
|
-
/* @__PURE__ */ a(
|
|
69
|
+
/* @__PURE__ */ a(l, {
|
|
63
70
|
path: "invites",
|
|
64
|
-
element: /* @__PURE__ */ a(
|
|
71
|
+
element: /* @__PURE__ */ a(S, { activeTab: "workspace" })
|
|
65
72
|
}),
|
|
66
|
-
/* @__PURE__ */ a(
|
|
73
|
+
/* @__PURE__ */ a(l, {
|
|
67
74
|
path: "invites/organizations",
|
|
68
|
-
element: /* @__PURE__ */ a(
|
|
75
|
+
element: /* @__PURE__ */ a(S, { activeTab: "organization" })
|
|
69
76
|
}),
|
|
70
|
-
/* @__PURE__ */ o(
|
|
77
|
+
/* @__PURE__ */ o(l, {
|
|
71
78
|
path: ":organizationId",
|
|
72
|
-
element: /* @__PURE__ */ a(
|
|
79
|
+
element: /* @__PURE__ */ a(C, { paramName: "organizationId" }),
|
|
73
80
|
children: [
|
|
74
|
-
|
|
81
|
+
d && /* @__PURE__ */ a(l, {
|
|
75
82
|
path: "members/invite",
|
|
76
|
-
element: /* @__PURE__ */ a(
|
|
83
|
+
element: /* @__PURE__ */ a(x, {})
|
|
77
84
|
}),
|
|
78
|
-
/* @__PURE__ */ a(
|
|
85
|
+
/* @__PURE__ */ a(l, {
|
|
79
86
|
path: "members",
|
|
80
|
-
element: /* @__PURE__ */ a(
|
|
87
|
+
element: /* @__PURE__ */ a(y, {})
|
|
81
88
|
}),
|
|
82
|
-
/* @__PURE__ */ a(
|
|
89
|
+
/* @__PURE__ */ a(l, {
|
|
83
90
|
path: "members/:userId",
|
|
84
|
-
element: /* @__PURE__ */ a(
|
|
91
|
+
element: /* @__PURE__ */ a(b, {})
|
|
85
92
|
})
|
|
86
93
|
]
|
|
87
94
|
})
|
|
88
95
|
] })
|
|
89
96
|
});
|
|
90
97
|
}
|
|
91
|
-
|
|
92
|
-
export { w as AdminOrganizationRoutes };
|
|
98
|
+
export { T as AdminOrganizationRoutes };
|
|
93
99
|
|
|
94
100
|
//# sourceMappingURL=AdminOrganizationRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminOrganizationRoutes.js","names":[],"sources":["../../src/organization-management/AdminOrganizationRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Outlet, Route, Routes, useParams } from 'react-router';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgScopedPermissions } from './providers/OrgScopedPermissions';\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 * Layout wrapper that scopes the PermissionProvider to the current\n * organization's id. This layout owns the `:id` or `:organizationId` URL\n * segment directly (see route declarations below) so\n * `useParams()[paramName]` is guaranteed to be populated and the\n * `OrgScopedPermissions` provider always wraps its descendants. Mirrors\n * the helper in UserOrganizationRoutes — keep them aligned.\n */\nfunction OrgScopedRouteLayout({ paramName }: { paramName: 'id' | 'organizationId' }) {\n const params = useParams<Record<string, string | undefined>>();\n const orgId = params[paramName];\n if (!orgId) return <Outlet />;\n return (\n <OrgScopedPermissions organizationId={orgId}>\n <Outlet />\n </OrgScopedPermissions>\n );\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=\"size-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 inviteDetails = useFeatureFlagDetails('organization.invite');\n const createEnabled = createDetails ? Boolean(createDetails.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). Admin app\n renders the platform-wide list (organizations query); product-app\n shells mounting this page should leave the default `mode=\"my\"`. */}\n <Route index element={<OrganizationsListPage mode=\"admin\" />} />\n {createEnabled && <Route path=\"new\" element={<OrganizationCreatePage />} />}\n\n {/* Per-org routes — the layout OWNS the `:id` segment so\n useParams().id is guaranteed to be set inside\n OrgScopedPermissions. */}\n <Route path=\":id\" element={<OrgScopedRouteLayout paramName=\"id\" />}>\n <Route index element={<OrganizationDetailPage />} />\n <Route path=\"edit\" element={<OrganizationEditPage />} />\n </Route>\n\n {/* Workspaces — literal \"workspaces\" prefix ranks above the bare\n dynamic `:id` / `:organizationId` segments. */}\n <Route path=\"workspaces\" element={<WorkspacesListPage mode=\"admin\" />} />\n <Route path=\"workspaces/new\" element={<WorkspaceCreatePage />} />\n <Route path=\"workspaces/:id\" element={<WorkspaceDetailPage />} />\n <Route path=\"workspaces/:id/edit\" element={<WorkspaceEditPage />} />\n\n {/* My Invites - user-level, not org-scoped. Declared before the\n `:organizationId` block so the literal \"invites\" wins the rank\n match. */}\n <Route path=\"invites\" element={<MyInvitesPage activeTab=\"workspace\" />} />\n <Route path=\"invites/organizations\" element={<MyInvitesPage activeTab=\"organization\" />} />\n\n {/* Member routes — layout OWNS the `:organizationId` segment for\n the same reason as the detail block above. */}\n <Route path=\":organizationId\" element={<OrgScopedRouteLayout paramName=\"organizationId\" />}>\n {inviteEnabled && <Route path=\"members/invite\" element={<InviteMemberPage />} />}\n <Route path=\"members\" element={<MembersListPage />} />\n <Route path=\"members/:userId\" element={<MemberDetailPage />} />\n </Route>\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdminOrganizationRoutes.js","names":["OrganizationCreatePage","lazy","m","OrganizationDetailPage","OrganizationEditPage","WorkspacesListPage","WorkspaceCreatePage","WorkspaceDetailPage","WorkspaceEditPage","MembersListPage","MemberDetailPage","InviteMemberPage","MyInvitesPage","OrgScopedRouteLayout","orgId","useParams","paramName","OrgScopedPermissions","Outlet","PageLoadingFallback","AdminOrganizationRoutes","createDetails","useFeatureFlagDetails","inviteDetails","createEnabled","inviteEnabled","Suspense","Routes","Route","OrganizationsListPage","Navigate"],"sources":["../../src/organization-management/AdminOrganizationRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Navigate, Outlet, Route, Routes, useParams } from 'react-router';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { OrgScopedPermissions } from './providers/OrgScopedPermissions';\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 * Layout wrapper that scopes the PermissionProvider to the current\n * organization's id. This layout owns the `:id` or `:organizationId` URL\n * segment directly (see route declarations below) so\n * `useParams()[paramName]` is guaranteed to be populated and the\n * `OrgScopedPermissions` provider always wraps its descendants. Mirrors\n * the helper in UserOrganizationRoutes — keep them aligned.\n */\nfunction OrgScopedRouteLayout({ paramName }: { paramName: 'id' | 'organizationId' }) {\n const params = useParams<Record<string, string | undefined>>();\n const orgId = params[paramName];\n if (!orgId) return <Outlet />;\n return (\n <OrgScopedPermissions organizationId={orgId}>\n <Outlet />\n </OrgScopedPermissions>\n );\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=\"size-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 inviteDetails = useFeatureFlagDetails('organization.invite');\n const createEnabled = createDetails ? Boolean(createDetails.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). Admin app\n renders the platform-wide list (organizations query); product-app\n shells mounting this page should leave the default `mode=\"my\"`. */}\n <Route index element={<OrganizationsListPage mode=\"admin\" />} />\n {/* Keep legacy/bookmarked /organizations/list links on the list page. */}\n <Route path=\"list\" element={<Navigate to=\"..\" replace />} />\n {createEnabled && <Route path=\"new\" element={<OrganizationCreatePage />} />}\n\n {/* Per-org routes — the layout OWNS the `:id` segment so\n useParams().id is guaranteed to be set inside\n OrgScopedPermissions. */}\n <Route path=\":id\" element={<OrgScopedRouteLayout paramName=\"id\" />}>\n <Route index element={<OrganizationDetailPage />} />\n <Route path=\"edit\" element={<OrganizationEditPage />} />\n </Route>\n\n {/* Workspaces — literal \"workspaces\" prefix ranks above the bare\n dynamic `:id` / `:organizationId` segments. */}\n <Route path=\"workspaces\" element={<WorkspacesListPage mode=\"admin\" />} />\n <Route path=\"workspaces/new\" element={<WorkspaceCreatePage />} />\n <Route path=\"workspaces/:id\" element={<WorkspaceDetailPage />} />\n <Route path=\"workspaces/:id/edit\" element={<WorkspaceEditPage />} />\n\n {/* My Invites - user-level, not org-scoped. Declared before the\n `:organizationId` block so the literal \"invites\" wins the rank\n match. */}\n <Route path=\"invites\" element={<MyInvitesPage activeTab=\"workspace\" />} />\n <Route path=\"invites/organizations\" element={<MyInvitesPage activeTab=\"organization\" />} />\n\n {/* Member routes — layout OWNS the `:organizationId` segment for\n the same reason as the detail block above. */}\n <Route path=\":organizationId\" element={<OrgScopedRouteLayout paramName=\"organizationId\" />}>\n {inviteEnabled && <Route path=\"members/invite\" element={<InviteMemberPage />} />}\n <Route path=\"members\" element={<MembersListPage />} />\n <Route path=\"members/:userId\" element={<MemberDetailPage />} />\n </Route>\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { OrgConsoleProvider as e } from "./providers/OrgConsoleProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { UserOrganizationRoutes as t } from "./UserOrganizationRoutes.js";
|
|
3
|
+
import { useTr as n } from "./shared/hooks/useTr.js";
|
|
4
4
|
import { useEffect as r } from "react";
|
|
5
5
|
import { Building2 as i, Mail as a, UserPlus as o } from "lucide-react";
|
|
6
6
|
import { Toaster as s } from "@burdenoff/fe-libs/ui";
|
|
7
7
|
import { FeatureFlagProvider as c } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
8
8
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
9
|
-
|
|
9
|
+
// src/organization-management/UserOrganizationRoot.tsx
|
|
10
10
|
var d = (d) => {
|
|
11
|
-
let { registerNavItems: f, registerFooterItems: p, basePath: m = "/organizations", renderToaster: h = !1 } = d, g =
|
|
11
|
+
let { registerNavItems: f, registerFooterItems: p, basePath: m = "/organizations", renderToaster: h = !1 } = d, g = n(), _ = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
12
12
|
return r(() => {
|
|
13
|
-
if (f) return
|
|
13
|
+
if (!f) return;
|
|
14
|
+
let e = [
|
|
14
15
|
{
|
|
15
16
|
id: "user-org-organizations",
|
|
16
17
|
label: g("nav.organizations", "Organizations"),
|
|
@@ -35,26 +36,29 @@ var d = (d) => {
|
|
|
35
36
|
order: 30,
|
|
36
37
|
group: "user"
|
|
37
38
|
}
|
|
38
|
-
]
|
|
39
|
+
];
|
|
40
|
+
return f(e);
|
|
39
41
|
}, [
|
|
40
42
|
f,
|
|
41
43
|
m,
|
|
42
44
|
g
|
|
43
45
|
]), r(() => {
|
|
44
|
-
if (p) return
|
|
46
|
+
if (!p) return;
|
|
47
|
+
let e = [{
|
|
45
48
|
id: "user-organization-version",
|
|
46
49
|
label: g("footer.userVersion", "Organization (User) v0.1.0"),
|
|
47
50
|
type: "status",
|
|
48
51
|
order: 30,
|
|
49
52
|
section: "left"
|
|
50
|
-
}]
|
|
53
|
+
}];
|
|
54
|
+
return p(e);
|
|
51
55
|
}, [p, g]), /* @__PURE__ */ l(c, {
|
|
52
56
|
workspaceId: null,
|
|
53
57
|
gateway: "global",
|
|
54
58
|
defaultEnabled: !0,
|
|
55
59
|
children: /* @__PURE__ */ u(e, {
|
|
56
60
|
...d,
|
|
57
|
-
children: [/* @__PURE__ */ l(
|
|
61
|
+
children: [/* @__PURE__ */ l(t, {}), h && /* @__PURE__ */ l(s, {
|
|
58
62
|
position: "top-right",
|
|
59
63
|
richColors: !0,
|
|
60
64
|
closeButton: !0
|
|
@@ -62,7 +66,6 @@ var d = (d) => {
|
|
|
62
66
|
})
|
|
63
67
|
});
|
|
64
68
|
};
|
|
65
|
-
//#endregion
|
|
66
69
|
export { d as UserOrganizationRoot };
|
|
67
70
|
|
|
68
71
|
//# sourceMappingURL=UserOrganizationRoot.js.map
|
|
@@ -1 +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 { Building2, Mail, UserPlus } 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';\nimport { useTr } from './shared/hooks/useTr';\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 the membership-scoped organization surface:\n * - Organizations list (`mode=\"my\"` → `myOrganizations`)\n * - Organization detail / edit (per-action `hasPermission` gates;\n * backend enforces membership on `organization(id)` resolver)\n * - Members list / detail / invite (backend enforces membership on\n * `organizationMembers` resolver)\n * - My pending invites\n *\n * Registers \"Organizations\" + \"My Invites\" nav items.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can swap\n * between the user and admin roots without adapter code.\n */\nexport const UserOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {\n registerNavItems,\n registerFooterItems,\n basePath = '/organizations',\n renderToaster = false,\n } = props;\n const tr = useTr();\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-organizations',\n label: tr('nav.organizations', 'Organizations'),\n path: basePath,\n icon: <Building2 size={20} />,\n order: 20,\n group: 'user',\n },\n {\n id: 'user-org-invite-people',\n label: tr('nav.invitePeople', 'Invite People'),\n path: joinPath(basePath, '/invite'),\n icon: <UserPlus size={20} />,\n order: 25,\n group: 'user',\n },\n {\n id: 'user-org-invites',\n label: tr('nav.myInvites', '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, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'user-organization-version',\n label: tr('footer.userVersion', '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, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <UserOrganizationRoutes />\n {renderToaster && <Toaster position=\"top-right\" richColors closeButton />}\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;AA6BA,
|
|
1
|
+
{"version":3,"file":"UserOrganizationRoot.js","names":["UserOrganizationRoot","props","tr","useTr","joinPath","base","path","useEffect","registerNavItems","navItems","basePath","Building2","UserPlus","Mail","registerFooterItems","footerItems","FeatureFlagProvider","OrgConsoleProvider","UserOrganizationRoutes","renderToaster","Toaster"],"sources":["../../src/organization-management/UserOrganizationRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { Building2, Mail, UserPlus } 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';\nimport { useTr } from './shared/hooks/useTr';\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 the membership-scoped organization surface:\n * - Organizations list (`mode=\"my\"` → `myOrganizations`)\n * - Organization detail / edit (per-action `hasPermission` gates;\n * backend enforces membership on `organization(id)` resolver)\n * - Members list / detail / invite (backend enforces membership on\n * `organizationMembers` resolver)\n * - My pending invites\n *\n * Registers \"Organizations\" + \"My Invites\" nav items.\n *\n * Takes the same props as `OrganizationRootProps` so hosts can swap\n * between the user and admin roots without adapter code.\n */\nexport const UserOrganizationRoot: FC<OrganizationRootProps> = (props) => {\n const {\n registerNavItems,\n registerFooterItems,\n basePath = '/organizations',\n renderToaster = false,\n } = props;\n const tr = useTr();\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-organizations',\n label: tr('nav.organizations', 'Organizations'),\n path: basePath,\n icon: <Building2 size={20} />,\n order: 20,\n group: 'user',\n },\n {\n id: 'user-org-invite-people',\n label: tr('nav.invitePeople', 'Invite People'),\n path: joinPath(basePath, '/invite'),\n icon: <UserPlus size={20} />,\n order: 25,\n group: 'user',\n },\n {\n id: 'user-org-invites',\n label: tr('nav.myInvites', '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, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'user-organization-version',\n label: tr('footer.userVersion', '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, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <OrgConsoleProvider {...props}>\n <UserOrganizationRoutes />\n {renderToaster && <Toaster position=\"top-right\" richColors closeButton />}\n </OrgConsoleProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;AA6BA,IAAaA,KAAmD,MAAU;CACxE,IAAM,EACJ,qBACA,wBACA,cAAW,kBACX,mBAAgB,OACdC,GACEC,IAAKC,EAAM,GAEXC,KAAY,GAAc,OACZC,EAAK,SAAS,GAAG,IAAIA,EAAK,MAAM,GAAG,EAAE,IAAIA,MACzCC,EAAK,WAAW,GAAG,IAAIA,IAAO,IAAIA;CAuDtD,OAnDAC,QAAgB;EACd,IAAI,CAACC,GAAkB;EAEvB,IAAMC,IAAsB;GAC1B;IACE,IAAI;IACJ,OAAOP,EAAG,qBAAqB,eAAe;IAC9C,MAAMQ;IACN,MAAM,kBAACC,GAAD,EAAW,MAAM,GAAK,CAAA;IAC5B,OAAO;IACP,OAAO;GACT;GACA;IACE,IAAI;IACJ,OAAOT,EAAG,oBAAoB,eAAe;IAC7C,MAAME,EAASM,GAAU,SAAS;IAClC,MAAM,kBAACE,GAAD,EAAU,MAAM,GAAK,CAAA;IAC3B,OAAO;IACP,OAAO;GACT;GACA;IACE,IAAI;IACJ,OAAOV,EAAG,iBAAiB,YAAY;IACvC,MAAME,EAASM,GAAU,UAAU;IACnC,MAAM,kBAACG,GAAD,EAAM,MAAM,GAAK,CAAA;IACvB,OAAO;IACP,OAAO;GACT;EACF;EAGA,OADgBL,EAAiBC,CAC1B;CACT,GAAG;EAACD;EAAkBE;EAAUR;CAAE,CAAC,GAEnCK,QAAgB;EACd,IAAI,CAACO,GAAqB;EAE1B,IAAMC,IAAc,CAClB;GACE,IAAI;GACJ,OAAOb,EAAG,sBAAsB,4BAA4B;GAC5D,MAAM;GACN,OAAO;GACP,SAAS;EACX,CACF;EAGA,OADgBY,EAAoBC,CAC7B;CACT,GAAG,CAACD,GAAqBZ,CAAE,CAAC,GAG1B,kBAACc,GAAD;EAAqB,aAAa;EAAM,SAAQ;EAAS,gBAAgB;EACvE,UAAA,kBAACC,GAAD;GAAoB,GAAIhB;GAAxB,UAAA,CACE,kBAACiB,GAAD,CAAyB,CAAA,GACxBC,KAAiB,kBAACC,GAAD;IAAS,UAAS;IAAY,YAAA;IAAW,aAAA;GAAa,CAAA,CACtD;;CACD,CAAA;AAEzB"}
|
|
@@ -2,99 +2,105 @@ import { OrganizationsListPage as e } from "./modules/organizations/pages/Organi
|
|
|
2
2
|
import { OrgScopedPermissions as t } from "./providers/OrgScopedPermissions.js";
|
|
3
3
|
import { Suspense as n, lazy as r } from "react";
|
|
4
4
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
let n =
|
|
5
|
+
import { Navigate as o, Outlet as s, Route as c, Routes as l, useParams as u } from "react-router";
|
|
6
|
+
// src/organization-management/UserOrganizationRoutes.tsx
|
|
7
|
+
var d = r(() => import("./modules/organizations/pages/OrganizationCreatePage.js").then((e) => ({ default: e.OrganizationCreatePage }))), f = r(() => import("./modules/organizations/pages/OrganizationDetailPage.js").then((e) => ({ default: e.OrganizationDetailPage }))), p = r(() => import("./modules/organizations/pages/OrganizationEditPage.js").then((e) => ({ default: e.OrganizationEditPage }))), m = r(() => import("./modules/workspaces/pages/WorkspacesListPage.js").then((e) => ({ default: e.WorkspacesListPage }))), h = r(() => import("./modules/workspaces/pages/WorkspaceCreatePage.js").then((e) => ({ default: e.WorkspaceCreatePage }))), g = r(() => import("./modules/workspaces/pages/WorkspaceDetailPage.js").then((e) => ({ default: e.WorkspaceDetailPage }))), _ = r(() => import("./modules/workspaces/pages/WorkspaceEditPage.js").then((e) => ({ default: e.WorkspaceEditPage }))), v = r(() => import("./modules/members/pages/MembersListPage.js").then((e) => ({ default: e.MembersListPage }))), y = r(() => import("./modules/members/pages/MemberDetailPage.js").then((e) => ({ default: e.MemberDetailPage }))), b = r(() => import("./modules/members/pages/InviteMemberPage.js").then((e) => ({ default: e.InviteMemberPage }))), x = r(() => import("./modules/members/pages/MyInvitesPage.js").then((e) => ({ default: e.MyInvitesPage }))), S = r(() => import("./modules/members/pages/OrganizationInviteAcceptancePage.js").then((e) => ({ default: e.OrganizationInviteAcceptancePage }))), C = r(() => import("./modules/members/pages/InvitePeoplePage.js").then((e) => ({ default: e.InvitePeoplePage })));
|
|
8
|
+
function w({ paramName: e }) {
|
|
9
|
+
let n = u()[e];
|
|
10
10
|
return n ? /* @__PURE__ */ i(t, {
|
|
11
11
|
organizationId: n,
|
|
12
|
-
children: /* @__PURE__ */ i(
|
|
13
|
-
}) : /* @__PURE__ */ i(
|
|
12
|
+
children: /* @__PURE__ */ i(s, {})
|
|
13
|
+
}) : /* @__PURE__ */ i(s, {});
|
|
14
14
|
}
|
|
15
|
-
function
|
|
15
|
+
function T() {
|
|
16
16
|
return /* @__PURE__ */ i("div", {
|
|
17
17
|
className: "flex items-center justify-center min-h-[200px]",
|
|
18
18
|
children: /* @__PURE__ */ i("div", { className: "size-8 animate-spin rounded-full border-2 border-[var(--color-border-default)] border-t-[var(--color-action-primary-bg)]" })
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function E() {
|
|
22
22
|
return /* @__PURE__ */ i(n, {
|
|
23
|
-
fallback: /* @__PURE__ */ i(
|
|
24
|
-
children: /* @__PURE__ */ a(
|
|
25
|
-
/* @__PURE__ */ i(
|
|
23
|
+
fallback: /* @__PURE__ */ i(T, {}),
|
|
24
|
+
children: /* @__PURE__ */ a(l, { children: [
|
|
25
|
+
/* @__PURE__ */ i(c, {
|
|
26
26
|
index: !0,
|
|
27
27
|
element: /* @__PURE__ */ i(e, { mode: "my" })
|
|
28
28
|
}),
|
|
29
|
-
/* @__PURE__ */ i(
|
|
29
|
+
/* @__PURE__ */ i(c, {
|
|
30
|
+
path: "list",
|
|
31
|
+
element: /* @__PURE__ */ i(o, {
|
|
32
|
+
to: "..",
|
|
33
|
+
replace: !0
|
|
34
|
+
})
|
|
35
|
+
}),
|
|
36
|
+
/* @__PURE__ */ i(c, {
|
|
30
37
|
path: "new",
|
|
31
|
-
element: /* @__PURE__ */ i(
|
|
38
|
+
element: /* @__PURE__ */ i(d, {})
|
|
32
39
|
}),
|
|
33
|
-
/* @__PURE__ */ a(
|
|
40
|
+
/* @__PURE__ */ a(c, {
|
|
34
41
|
path: ":id",
|
|
35
|
-
element: /* @__PURE__ */ i(
|
|
36
|
-
children: [/* @__PURE__ */ i(
|
|
42
|
+
element: /* @__PURE__ */ i(w, { paramName: "id" }),
|
|
43
|
+
children: [/* @__PURE__ */ i(c, {
|
|
37
44
|
index: !0,
|
|
38
|
-
element: /* @__PURE__ */ i(d, {})
|
|
39
|
-
}), /* @__PURE__ */ i(s, {
|
|
40
|
-
path: "edit",
|
|
41
45
|
element: /* @__PURE__ */ i(f, {})
|
|
46
|
+
}), /* @__PURE__ */ i(c, {
|
|
47
|
+
path: "edit",
|
|
48
|
+
element: /* @__PURE__ */ i(p, {})
|
|
42
49
|
})]
|
|
43
50
|
}),
|
|
44
|
-
/* @__PURE__ */ i(
|
|
51
|
+
/* @__PURE__ */ i(c, {
|
|
45
52
|
path: "invite/:inviteId",
|
|
46
|
-
element: /* @__PURE__ */ i(
|
|
53
|
+
element: /* @__PURE__ */ i(S, {})
|
|
47
54
|
}),
|
|
48
|
-
/* @__PURE__ */ i(
|
|
55
|
+
/* @__PURE__ */ i(c, {
|
|
49
56
|
path: "invites",
|
|
50
|
-
element: /* @__PURE__ */ i(
|
|
57
|
+
element: /* @__PURE__ */ i(x, { activeTab: "workspace" })
|
|
51
58
|
}),
|
|
52
|
-
/* @__PURE__ */ i(
|
|
59
|
+
/* @__PURE__ */ i(c, {
|
|
53
60
|
path: "invites/organizations",
|
|
54
|
-
element: /* @__PURE__ */ i(
|
|
61
|
+
element: /* @__PURE__ */ i(x, { activeTab: "organization" })
|
|
55
62
|
}),
|
|
56
|
-
/* @__PURE__ */ i(
|
|
63
|
+
/* @__PURE__ */ i(c, {
|
|
57
64
|
path: "invite",
|
|
58
|
-
element: /* @__PURE__ */ i(
|
|
65
|
+
element: /* @__PURE__ */ i(C, {})
|
|
59
66
|
}),
|
|
60
|
-
/* @__PURE__ */ i(
|
|
67
|
+
/* @__PURE__ */ i(c, {
|
|
61
68
|
path: "workspaces",
|
|
62
|
-
element: /* @__PURE__ */ i(
|
|
69
|
+
element: /* @__PURE__ */ i(m, { mode: "my" })
|
|
63
70
|
}),
|
|
64
|
-
/* @__PURE__ */ i(
|
|
71
|
+
/* @__PURE__ */ i(c, {
|
|
65
72
|
path: "workspaces/new",
|
|
66
|
-
element: /* @__PURE__ */ i(
|
|
73
|
+
element: /* @__PURE__ */ i(h, {})
|
|
67
74
|
}),
|
|
68
|
-
/* @__PURE__ */ i(
|
|
75
|
+
/* @__PURE__ */ i(c, {
|
|
69
76
|
path: "workspaces/:id",
|
|
70
|
-
element: /* @__PURE__ */ i(
|
|
77
|
+
element: /* @__PURE__ */ i(g, {})
|
|
71
78
|
}),
|
|
72
|
-
/* @__PURE__ */ i(
|
|
79
|
+
/* @__PURE__ */ i(c, {
|
|
73
80
|
path: "workspaces/:id/edit",
|
|
74
|
-
element: /* @__PURE__ */ i(
|
|
81
|
+
element: /* @__PURE__ */ i(_, {})
|
|
75
82
|
}),
|
|
76
|
-
/* @__PURE__ */ a(
|
|
83
|
+
/* @__PURE__ */ a(c, {
|
|
77
84
|
path: ":organizationId",
|
|
78
|
-
element: /* @__PURE__ */ i(
|
|
85
|
+
element: /* @__PURE__ */ i(w, { paramName: "organizationId" }),
|
|
79
86
|
children: [
|
|
80
|
-
/* @__PURE__ */ i(
|
|
87
|
+
/* @__PURE__ */ i(c, {
|
|
81
88
|
path: "members/invite",
|
|
82
|
-
element: /* @__PURE__ */ i(
|
|
89
|
+
element: /* @__PURE__ */ i(b, {})
|
|
83
90
|
}),
|
|
84
|
-
/* @__PURE__ */ i(
|
|
91
|
+
/* @__PURE__ */ i(c, {
|
|
85
92
|
path: "members",
|
|
86
|
-
element: /* @__PURE__ */ i(
|
|
93
|
+
element: /* @__PURE__ */ i(v, {})
|
|
87
94
|
}),
|
|
88
|
-
/* @__PURE__ */ i(
|
|
95
|
+
/* @__PURE__ */ i(c, {
|
|
89
96
|
path: "members/:userId",
|
|
90
|
-
element: /* @__PURE__ */ i(
|
|
97
|
+
element: /* @__PURE__ */ i(y, {})
|
|
91
98
|
})
|
|
92
99
|
]
|
|
93
100
|
})
|
|
94
101
|
] })
|
|
95
102
|
});
|
|
96
103
|
}
|
|
97
|
-
|
|
98
|
-
export { T as UserOrganizationRoutes };
|
|
104
|
+
export { E as UserOrganizationRoutes };
|
|
99
105
|
|
|
100
106
|
//# sourceMappingURL=UserOrganizationRoutes.js.map
|