@burdenoff/microfe-admin 2026.625.1 → 2026.712.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/admin/AdminRoot.js +2 -2
- package/dist/admin/AdminRoot.js.map +1 -1
- package/dist/admin/AdminRoutes.js +130 -78
- package/dist/admin/AdminRoutes.js.map +1 -1
- package/dist/admin/components/AccessDenied.js +2 -2
- package/dist/admin/components/AccessDenied.js.map +1 -1
- package/dist/admin/components/ActivityFeed.js +4 -4
- package/dist/admin/components/ActivityFeed.js.map +1 -1
- package/dist/admin/components/Charts.js.map +1 -1
- package/dist/admin/components/ConfirmDialog.js +1 -1
- package/dist/admin/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/components/DataTable.js.map +1 -1
- package/dist/admin/components/FormSheet.js +1 -1
- package/dist/admin/components/FormSheet.js.map +1 -1
- package/dist/admin/components/TenantSsoPanel.js +1 -1
- package/dist/admin/components/TenantSsoPanel.js.map +1 -1
- package/dist/admin/components/Toast.js +11 -11
- package/dist/admin/components/Toast.js.map +1 -1
- package/dist/admin/components/forms/SubscriptionForm.js +2 -2
- package/dist/admin/components/forms/SubscriptionForm.js.map +1 -1
- package/dist/admin/components/forms/TenantForm.js +1 -1
- package/dist/admin/components/forms/UserForm.js +1 -1
- package/dist/admin/components/ui.js +3 -3
- package/dist/admin/components/ui.js.map +1 -1
- package/dist/admin/constants/featureFlags.js +12 -0
- package/dist/admin/constants/featureFlags.js.map +1 -0
- package/dist/admin/constants/index.js +33 -24
- package/dist/admin/constants/index.js.map +1 -1
- package/dist/admin/pages/AuditLogsPage.js +92 -77
- package/dist/admin/pages/AuditLogsPage.js.map +1 -1
- package/dist/admin/pages/BillingPage.js +95 -51
- package/dist/admin/pages/BillingPage.js.map +1 -1
- package/dist/admin/pages/CommunicationsPage.js +97 -92
- package/dist/admin/pages/CommunicationsPage.js.map +1 -1
- package/dist/admin/pages/ContentPagesPage.js +274 -259
- package/dist/admin/pages/ContentPagesPage.js.map +1 -1
- package/dist/admin/pages/DashboardPage.js +113 -84
- package/dist/admin/pages/DashboardPage.js.map +1 -1
- package/dist/admin/pages/FeatureFlagsPage.js +93 -75
- package/dist/admin/pages/FeatureFlagsPage.js.map +1 -1
- package/dist/admin/pages/OrganizationsListPage.js +105 -87
- package/dist/admin/pages/OrganizationsListPage.js.map +1 -1
- package/dist/admin/pages/ProductsPage.js +138 -130
- package/dist/admin/pages/ProductsPage.js.map +1 -1
- package/dist/admin/pages/ReferralsPage.js +70 -52
- package/dist/admin/pages/ReferralsPage.js.map +1 -1
- package/dist/admin/pages/RolesPermissionsPage.js +136 -118
- package/dist/admin/pages/RolesPermissionsPage.js.map +1 -1
- package/dist/admin/pages/SREPage.js +34 -32
- package/dist/admin/pages/SREPage.js.map +1 -1
- package/dist/admin/pages/SandboxSettingsPage.js +360 -322
- package/dist/admin/pages/SandboxSettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage.js +64 -61
- package/dist/admin/pages/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SyncFailuresPage.js +120 -118
- package/dist/admin/pages/SyncFailuresPage.js.map +1 -1
- package/dist/admin/pages/TenantDetailPage.js +286 -231
- package/dist/admin/pages/TenantDetailPage.js.map +1 -1
- package/dist/admin/pages/TenantFormRoutePage.js +78 -73
- package/dist/admin/pages/TenantFormRoutePage.js.map +1 -1
- package/dist/admin/pages/TenantsListPage.js +182 -155
- package/dist/admin/pages/TenantsListPage.js.map +1 -1
- package/dist/admin/pages/UsersListPage.js +128 -113
- package/dist/admin/pages/UsersListPage.js.map +1 -1
- package/dist/admin/pages/WaitlistPage.js +78 -63
- package/dist/admin/pages/WaitlistPage.js.map +1 -1
- package/dist/admin/pages/WorkflowsPage.js +107 -102
- package/dist/admin/pages/WorkflowsPage.js.map +1 -1
- package/dist/admin/pages/WorkspacesListPage.js +61 -49
- package/dist/admin/pages/WorkspacesListPage.js.map +1 -1
- package/dist/node_modules/@hookform/resolvers/dist/resolvers.js +2 -2
- package/dist/node_modules/@hookform/resolvers/dist/resolvers.js.map +1 -1
- package/dist/node_modules/@hookform/resolvers/zod/dist/zod.js +35 -26
- package/dist/node_modules/@hookform/resolvers/zod/dist/zod.js.map +1 -1
- package/dist/node_modules/react-hook-form/dist/index.esm.js +609 -516
- package/dist/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,285 +1,340 @@
|
|
|
1
1
|
import { useToast as e } from "../components/Toast.js";
|
|
2
2
|
import { useAdmin as t } from "../providers/AdminProvider.js";
|
|
3
3
|
import { useAdminPermissions as n } from "../hooks/useAdminPermissions.js";
|
|
4
|
-
import { Avatar as r, Button as i, Card as a, CardContent as o, CardHeader as s, CardTitle as c, Separator as
|
|
5
|
-
import { PageLayout as
|
|
6
|
-
import { TenantStatusBadge as
|
|
7
|
-
import { formatDate as
|
|
8
|
-
import { tWithFallback as
|
|
9
|
-
import { PermissionGuard as
|
|
4
|
+
import { Avatar as r, Button as i, Card as a, CardContent as o, CardHeader as s, CardTitle as c, Separator as ee } from "../components/ui.js";
|
|
5
|
+
import { PageLayout as l } from "../components/PageLayout.js";
|
|
6
|
+
import { TenantStatusBadge as te } from "../components/StatusBadge.js";
|
|
7
|
+
import { formatDate as u } from "../utils/formatters.js";
|
|
8
|
+
import { tWithFallback as ne } from "../utils/i18n.js";
|
|
9
|
+
import { PermissionGuard as d } from "../components/PermissionGuard.js";
|
|
10
10
|
import "../components/index.js";
|
|
11
|
-
import { joinPath as
|
|
12
|
-
import { mapTenantToUi as
|
|
13
|
-
import { useActivateTenantMutation as
|
|
14
|
-
import { emitTenantLifecycle as
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
11
|
+
import { joinPath as f } from "../utils/navigation.js";
|
|
12
|
+
import { mapTenantToUi as p } from "../utils/mappers.js";
|
|
13
|
+
import { useActivateTenantMutation as m, useGetTenantQuery as h, useSuspendTenantMutation as g } from "../../generated/global-operations.js";
|
|
14
|
+
import { emitTenantLifecycle as _ } from "../utils/tenantEvents.js";
|
|
15
|
+
import { TENANT_FEATURE_FLAGS as v } from "../constants/featureFlags.js";
|
|
16
|
+
import { TenantMembersPanel as re } from "../components/TenantMembersPanel.js";
|
|
17
|
+
import { TenantSsoPanel as ie } from "../components/TenantSsoPanel.js";
|
|
18
|
+
import { ArrowLeft as y, Ban as ae, Building2 as oe, Calendar as b, CheckCircle as se, Globe as x, Loader2 as S, Mail as C, Settings as w, Users as ce } from "lucide-react";
|
|
19
|
+
import { useNavigate as le, useParams as ue } from "react-router-dom";
|
|
20
|
+
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
21
|
+
import { useFeatureFlag as D } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
22
|
+
import { useI18n as O } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
23
|
+
import { EmphasisPanel as k, NextSteps as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
|
|
24
|
+
import { useEventBus as M } from "@burdenoff/fe-libs/shared/events";
|
|
22
25
|
//#region src/admin/pages/TenantDetailPage.tsx
|
|
23
|
-
function
|
|
24
|
-
let { canViewTenants:
|
|
25
|
-
variables: { id:
|
|
26
|
-
skip: !
|
|
26
|
+
function N() {
|
|
27
|
+
let { canViewTenants: N, canManageTenants: P, isLoading: F } = n(), { tenantId: I } = ue(), L = le(), { basePath: R = "" } = t(), z = e(), { t: B } = O(), V = D(v.management, !0), H = D(v.detail, !0), U = D(v.edit, !0), W = V && H, G = P && U, de = P && V, K = (e, t, n) => ne(B, e, t, n), { data: q, loading: fe, error: J } = h({
|
|
28
|
+
variables: { id: I },
|
|
29
|
+
skip: !I || F || !N || !W,
|
|
27
30
|
fetchPolicy: "cache-and-network"
|
|
28
|
-
}), [
|
|
29
|
-
if (!
|
|
31
|
+
}), [pe, { loading: Y }] = g(), [me, { loading: X }] = m(), Z = M(), Q = q?.tenant ? p(q.tenant) : null, he = async () => {
|
|
32
|
+
if (!I) return;
|
|
30
33
|
let e = Q?.slug;
|
|
31
34
|
try {
|
|
32
|
-
await
|
|
33
|
-
tenantId:
|
|
35
|
+
await pe({ variables: { id: I } }), _(Z, "tenant.tenant.suspended", {
|
|
36
|
+
tenantId: I,
|
|
34
37
|
tenantSlug: e,
|
|
35
38
|
status: "SUSPENDED"
|
|
36
|
-
}),
|
|
39
|
+
}), z.success(K("admin.tenantDetail.toast.suspendedTitle", "Tenant suspended"), K("admin.tenantDetail.toast.suspendedDescription", "{{name}} has been suspended.", { name: Q?.name ?? "" }));
|
|
37
40
|
} catch (e) {
|
|
38
|
-
|
|
41
|
+
z.error(K("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : K("admin.tenantDetail.toast.suspendFailed", "Failed to suspend tenant."));
|
|
39
42
|
}
|
|
40
|
-
},
|
|
41
|
-
if (!
|
|
43
|
+
}, ge = async () => {
|
|
44
|
+
if (!I) return;
|
|
42
45
|
let e = Q?.slug;
|
|
43
46
|
try {
|
|
44
|
-
await
|
|
45
|
-
tenantId:
|
|
47
|
+
await me({ variables: { id: I } }), _(Z, "tenant.tenant.activated", {
|
|
48
|
+
tenantId: I,
|
|
46
49
|
tenantSlug: e,
|
|
47
50
|
status: "ACTIVE"
|
|
48
|
-
}),
|
|
51
|
+
}), z.success(K("admin.tenantDetail.toast.activatedTitle", "Tenant activated"), K("admin.tenantDetail.toast.activatedDescription", "{{name}} has been activated.", { name: Q?.name ?? "" }));
|
|
49
52
|
} catch (e) {
|
|
50
|
-
|
|
53
|
+
z.error(K("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : K("admin.tenantDetail.toast.activateFailed", "Failed to activate tenant."));
|
|
51
54
|
}
|
|
52
|
-
}, $ =
|
|
53
|
-
return /* @__PURE__ */
|
|
54
|
-
allowed:
|
|
55
|
-
isLoading:
|
|
56
|
-
pageTitle:
|
|
57
|
-
denyMessage:
|
|
58
|
-
children:
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
}, $ = q?.tenant?.workspaces ?? [];
|
|
56
|
+
return !F && !N ? /* @__PURE__ */ T(d, {
|
|
57
|
+
allowed: !1,
|
|
58
|
+
isLoading: !1,
|
|
59
|
+
pageTitle: K("admin.tenantDetail.pageTitle", "Tenant Details"),
|
|
60
|
+
denyMessage: K("admin.tenantDetail.denyMessage", "You don't have permission to view tenant details."),
|
|
61
|
+
children: null
|
|
62
|
+
}) : W ? /* @__PURE__ */ T(d, {
|
|
63
|
+
allowed: N,
|
|
64
|
+
isLoading: F,
|
|
65
|
+
pageTitle: K("admin.tenantDetail.pageTitle", "Tenant Details"),
|
|
66
|
+
denyMessage: K("admin.tenantDetail.denyMessage", "You don't have permission to view tenant details."),
|
|
67
|
+
children: fe ? /* @__PURE__ */ T(l, {
|
|
68
|
+
title: K("admin.tenantDetail.loadingTitle", "Loading..."),
|
|
69
|
+
children: /* @__PURE__ */ T("div", {
|
|
61
70
|
className: "flex h-64 items-center justify-center",
|
|
62
|
-
children: /* @__PURE__ */
|
|
71
|
+
children: /* @__PURE__ */ T(S, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
63
72
|
})
|
|
64
|
-
}) :
|
|
65
|
-
title:
|
|
66
|
-
description:
|
|
67
|
-
children: [
|
|
73
|
+
}) : J || !Q ? /* @__PURE__ */ E(l, {
|
|
74
|
+
title: K("admin.tenantDetail.notFoundTitle", "Tenant Not Found"),
|
|
75
|
+
description: K("admin.tenantDetail.notFoundDescription", "The requested tenant could not be found"),
|
|
76
|
+
children: [J && /* @__PURE__ */ T("div", {
|
|
68
77
|
className: "mb-4 rounded-md border border-status-error-border/50 bg-status-error-bg/10 p-4 text-sm text-status-error-text",
|
|
69
|
-
children:
|
|
70
|
-
}), /* @__PURE__ */
|
|
78
|
+
children: J.message
|
|
79
|
+
}), /* @__PURE__ */ E(i, {
|
|
71
80
|
variant: "outline",
|
|
72
|
-
onClick: () =>
|
|
73
|
-
children: [/* @__PURE__ */
|
|
81
|
+
onClick: () => L(f(R, "tenants")),
|
|
82
|
+
children: [/* @__PURE__ */ T(y, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.backToTenants", "Back to Tenants")]
|
|
74
83
|
})]
|
|
75
|
-
}) : /* @__PURE__ */
|
|
84
|
+
}) : /* @__PURE__ */ E(l, {
|
|
76
85
|
title: Q.name,
|
|
77
|
-
description:
|
|
78
|
-
actions: /* @__PURE__ */
|
|
86
|
+
description: K("admin.tenantDetail.tenantId", "Tenant ID: {{id}}", { id: Q.id }),
|
|
87
|
+
actions: /* @__PURE__ */ E("div", {
|
|
79
88
|
className: "flex items-center gap-2",
|
|
80
89
|
children: [
|
|
81
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ E(i, {
|
|
82
91
|
variant: "outline",
|
|
83
|
-
onClick: () =>
|
|
84
|
-
children: [/* @__PURE__ */
|
|
92
|
+
onClick: () => L(f(R, "tenants")),
|
|
93
|
+
children: [/* @__PURE__ */ T(y, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.back", "Back")]
|
|
85
94
|
}),
|
|
86
|
-
|
|
95
|
+
G && /* @__PURE__ */ E(i, {
|
|
87
96
|
variant: "outline",
|
|
88
|
-
onClick: () =>
|
|
89
|
-
children: [/* @__PURE__ */
|
|
97
|
+
onClick: () => L(f(R, `tenants/${Q.id}/edit`)),
|
|
98
|
+
children: [/* @__PURE__ */ T(w, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.edit", "Edit")]
|
|
90
99
|
}),
|
|
91
|
-
|
|
100
|
+
de && (Q.status === "active" ? /* @__PURE__ */ E(i, {
|
|
92
101
|
variant: "outline",
|
|
93
|
-
className: "text-warning",
|
|
94
|
-
onClick:
|
|
95
|
-
disabled:
|
|
96
|
-
children: [
|
|
97
|
-
}) : /* @__PURE__ */
|
|
102
|
+
className: "text-status-warning-text",
|
|
103
|
+
onClick: he,
|
|
104
|
+
disabled: Y,
|
|
105
|
+
children: [Y ? /* @__PURE__ */ T(S, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ T(ae, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.suspend", "Suspend")]
|
|
106
|
+
}) : /* @__PURE__ */ E(i, {
|
|
98
107
|
variant: "outline",
|
|
99
|
-
className: "text-success",
|
|
100
|
-
onClick:
|
|
108
|
+
className: "text-status-success-text",
|
|
109
|
+
onClick: ge,
|
|
101
110
|
disabled: X,
|
|
102
|
-
children: [X ? /* @__PURE__ */
|
|
111
|
+
children: [X ? /* @__PURE__ */ T(S, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ T(se, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.activate", "Activate")]
|
|
103
112
|
}))
|
|
104
113
|
]
|
|
105
114
|
}),
|
|
106
|
-
children:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ T(j, {
|
|
117
|
+
className: "mb-6",
|
|
118
|
+
children: K("admin.tenantDetail.purpose", "Everything about a single tenant in one place — their profile, the people inside it, and their single sign-on setup. From here you manage that one customer account: review who has access, adjust their SSO, and suspend or reactivate them when needed.")
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ T(A, {
|
|
121
|
+
storageKey: "admin-tenant-detail",
|
|
122
|
+
steps: [
|
|
123
|
+
{
|
|
124
|
+
id: "edit-tenant",
|
|
125
|
+
label: K("admin.tenantDetail.nextSteps.edit", "Edit tenant details"),
|
|
126
|
+
description: K("admin.tenantDetail.nextSteps.editDesc", "Update the name, domain or plan for this tenant."),
|
|
127
|
+
onClick: () => L(f(R, `tenants/${Q.id}/edit`)),
|
|
128
|
+
done: !G
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: "review-members",
|
|
132
|
+
label: K("admin.tenantDetail.nextSteps.members", "Review members"),
|
|
133
|
+
description: K("admin.tenantDetail.nextSteps.membersDesc", "Check who has access inside this tenant."),
|
|
134
|
+
href: "#tenant-members"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "configure-sso",
|
|
138
|
+
label: K("admin.tenantDetail.nextSteps.sso", "Configure SSO"),
|
|
139
|
+
description: K("admin.tenantDetail.nextSteps.ssoDesc", "Set up single sign-on so their team logs in with your IdP."),
|
|
140
|
+
href: "#tenant-sso"
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}),
|
|
144
|
+
/* @__PURE__ */ E("div", {
|
|
145
|
+
className: "grid gap-6 lg:grid-cols-3",
|
|
146
|
+
children: [/* @__PURE__ */ E("div", {
|
|
147
|
+
className: "space-y-6 lg:col-span-2",
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ T(k, {
|
|
150
|
+
className: "p-0",
|
|
151
|
+
children: /* @__PURE__ */ E(a, {
|
|
152
|
+
className: "border-0 bg-transparent shadow-none hover:border-0",
|
|
153
|
+
children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
154
|
+
className: "text-lg",
|
|
155
|
+
children: K("admin.tenantDetail.overview.title", "Overview")
|
|
156
|
+
}) }), /* @__PURE__ */ E(o, { children: [
|
|
157
|
+
/* @__PURE__ */ E("div", {
|
|
158
|
+
className: "flex items-start gap-4",
|
|
159
|
+
children: [/* @__PURE__ */ T(r, {
|
|
160
|
+
fallback: Q.name.slice(0, 2).toUpperCase(),
|
|
161
|
+
size: "lg"
|
|
162
|
+
}), /* @__PURE__ */ E("div", {
|
|
163
|
+
className: "flex-1 space-y-4",
|
|
164
|
+
children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h2", {
|
|
165
|
+
className: "text-xl font-semibold text-text-primary",
|
|
166
|
+
children: Q.name
|
|
167
|
+
}), /* @__PURE__ */ E("p", {
|
|
168
|
+
className: "text-sm text-text-secondary",
|
|
169
|
+
children: ["@", Q.slug]
|
|
170
|
+
})] }), /* @__PURE__ */ E("div", {
|
|
171
|
+
className: "flex flex-wrap items-center gap-4",
|
|
172
|
+
children: [/* @__PURE__ */ T(te, { status: Q.status }), Q.plan && /* @__PURE__ */ T("span", {
|
|
173
|
+
className: "rounded-md bg-action-primary-bg/10 px-2 py-1 text-xs font-medium text-primary",
|
|
174
|
+
children: Q.plan
|
|
175
|
+
})]
|
|
176
|
+
})]
|
|
177
|
+
})]
|
|
178
|
+
}),
|
|
179
|
+
/* @__PURE__ */ T(ee, { className: "my-6" }),
|
|
180
|
+
/* @__PURE__ */ E("div", {
|
|
181
|
+
className: "grid gap-4 sm:grid-cols-2",
|
|
182
|
+
children: [
|
|
183
|
+
Q.ownerEmail && /* @__PURE__ */ E("div", {
|
|
184
|
+
className: "flex items-center gap-3",
|
|
185
|
+
children: [/* @__PURE__ */ T(C, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
186
|
+
className: "text-xs text-text-secondary",
|
|
187
|
+
children: K("admin.tenantDetail.overview.ownerEmail", "Owner Email")
|
|
188
|
+
}), /* @__PURE__ */ T("p", {
|
|
189
|
+
className: "text-sm font-medium",
|
|
190
|
+
children: Q.ownerEmail
|
|
191
|
+
})] })]
|
|
192
|
+
}),
|
|
193
|
+
Q.domain && /* @__PURE__ */ E("div", {
|
|
194
|
+
className: "flex items-center gap-3",
|
|
195
|
+
children: [/* @__PURE__ */ T(x, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
196
|
+
className: "text-xs text-text-secondary",
|
|
197
|
+
children: K("admin.tenantDetail.overview.domain", "Domain")
|
|
198
|
+
}), /* @__PURE__ */ T("p", {
|
|
199
|
+
className: "text-sm font-medium",
|
|
200
|
+
children: Q.domain
|
|
201
|
+
})] })]
|
|
202
|
+
}),
|
|
203
|
+
/* @__PURE__ */ E("div", {
|
|
204
|
+
className: "flex items-center gap-3",
|
|
205
|
+
children: [/* @__PURE__ */ T(b, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
206
|
+
className: "text-xs text-text-secondary",
|
|
207
|
+
children: K("admin.tenantDetail.overview.created", "Created")
|
|
208
|
+
}), /* @__PURE__ */ T("p", {
|
|
209
|
+
className: "text-sm font-medium",
|
|
210
|
+
children: u(Q.createdAt)
|
|
211
|
+
})] })]
|
|
212
|
+
}),
|
|
213
|
+
/* @__PURE__ */ E("div", {
|
|
214
|
+
className: "flex items-center gap-3",
|
|
215
|
+
children: [/* @__PURE__ */ T(b, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
216
|
+
className: "text-xs text-text-secondary",
|
|
217
|
+
children: K("admin.tenantDetail.overview.lastUpdated", "Last Updated")
|
|
218
|
+
}), /* @__PURE__ */ T("p", {
|
|
219
|
+
className: "text-sm font-medium",
|
|
220
|
+
children: u(Q.updatedAt)
|
|
221
|
+
})] })]
|
|
222
|
+
})
|
|
223
|
+
]
|
|
224
|
+
})
|
|
225
|
+
] })]
|
|
226
|
+
})
|
|
136
227
|
}),
|
|
137
|
-
/* @__PURE__ */
|
|
138
|
-
|
|
228
|
+
$.length > 0 && /* @__PURE__ */ E(a, { children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
229
|
+
className: "text-lg",
|
|
230
|
+
children: K("admin.tenantDetail.workspaces.title", "Workspaces ({{count}})", { count: $.length })
|
|
231
|
+
}) }), /* @__PURE__ */ T(o, { children: /* @__PURE__ */ T("div", {
|
|
232
|
+
className: "space-y-2",
|
|
233
|
+
children: $.map((e) => /* @__PURE__ */ E("div", {
|
|
234
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
235
|
+
children: [/* @__PURE__ */ T("span", {
|
|
236
|
+
className: "text-sm font-medium",
|
|
237
|
+
children: e.name
|
|
238
|
+
}), /* @__PURE__ */ T("span", {
|
|
239
|
+
className: "text-xs text-text-secondary capitalize",
|
|
240
|
+
children: e.status?.toLowerCase()
|
|
241
|
+
})]
|
|
242
|
+
}, e.id))
|
|
243
|
+
}) })] }),
|
|
244
|
+
Q.settings && /* @__PURE__ */ E(a, { children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
245
|
+
className: "text-lg",
|
|
246
|
+
children: K("admin.tenantDetail.settings.title", "Settings")
|
|
247
|
+
}) }), /* @__PURE__ */ T(o, { children: /* @__PURE__ */ E("div", {
|
|
139
248
|
className: "grid gap-4 sm:grid-cols-2",
|
|
140
249
|
children: [
|
|
141
|
-
|
|
142
|
-
className: "flex items-center
|
|
143
|
-
children: [/* @__PURE__ */
|
|
144
|
-
className: "text-
|
|
145
|
-
children:
|
|
146
|
-
}), /* @__PURE__ */
|
|
147
|
-
className:
|
|
148
|
-
children: Q.
|
|
149
|
-
})]
|
|
250
|
+
/* @__PURE__ */ E("div", {
|
|
251
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
252
|
+
children: [/* @__PURE__ */ T("span", {
|
|
253
|
+
className: "text-sm",
|
|
254
|
+
children: K("admin.tenantDetail.settings.allowSignup", "Allow Signup")
|
|
255
|
+
}), /* @__PURE__ */ T("span", {
|
|
256
|
+
className: `text-sm font-medium ${Q.settings?.allowSignup ? "text-status-success-text" : "text-text-secondary"}`,
|
|
257
|
+
children: Q.settings?.allowSignup ? K("admin.tenantDetail.settings.enabled", "Enabled") : K("admin.tenantDetail.settings.disabled", "Disabled")
|
|
258
|
+
})]
|
|
150
259
|
}),
|
|
151
|
-
|
|
152
|
-
className: "flex items-center
|
|
153
|
-
children: [/* @__PURE__ */
|
|
154
|
-
className: "text-
|
|
155
|
-
children:
|
|
156
|
-
}), /* @__PURE__ */
|
|
157
|
-
className:
|
|
158
|
-
children: Q.
|
|
159
|
-
})]
|
|
260
|
+
/* @__PURE__ */ E("div", {
|
|
261
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
262
|
+
children: [/* @__PURE__ */ T("span", {
|
|
263
|
+
className: "text-sm",
|
|
264
|
+
children: K("admin.tenantDetail.settings.sso", "SSO")
|
|
265
|
+
}), /* @__PURE__ */ T("span", {
|
|
266
|
+
className: `text-sm font-medium ${Q.settings?.ssoEnabled ? "text-status-success-text" : "text-text-secondary"}`,
|
|
267
|
+
children: Q.settings?.ssoEnabled ? K("admin.tenantDetail.settings.enabled", "Enabled") : K("admin.tenantDetail.settings.disabled", "Disabled")
|
|
268
|
+
})]
|
|
160
269
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
162
|
-
className: "flex items-center
|
|
163
|
-
children: [/* @__PURE__ */
|
|
164
|
-
className: "text-
|
|
165
|
-
children:
|
|
166
|
-
}), /* @__PURE__ */
|
|
167
|
-
className:
|
|
168
|
-
children:
|
|
169
|
-
})]
|
|
270
|
+
/* @__PURE__ */ E("div", {
|
|
271
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
272
|
+
children: [/* @__PURE__ */ T("span", {
|
|
273
|
+
className: "text-sm",
|
|
274
|
+
children: K("admin.tenantDetail.settings.mfaRequired", "MFA Required")
|
|
275
|
+
}), /* @__PURE__ */ T("span", {
|
|
276
|
+
className: `text-sm font-medium ${Q.settings?.mfaRequired ? "text-status-success-text" : "text-text-secondary"}`,
|
|
277
|
+
children: Q.settings?.mfaRequired ? K("admin.tenantDetail.settings.yes", "Yes") : K("admin.tenantDetail.settings.no", "No")
|
|
278
|
+
})]
|
|
170
279
|
}),
|
|
171
|
-
/* @__PURE__ */
|
|
172
|
-
className: "flex items-center
|
|
173
|
-
children: [/* @__PURE__ */
|
|
174
|
-
className: "text-
|
|
175
|
-
children:
|
|
176
|
-
}), /* @__PURE__ */
|
|
280
|
+
/* @__PURE__ */ E("div", {
|
|
281
|
+
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
282
|
+
children: [/* @__PURE__ */ T("span", {
|
|
283
|
+
className: "text-sm",
|
|
284
|
+
children: K("admin.tenantDetail.settings.dataRetention", "Data Retention")
|
|
285
|
+
}), /* @__PURE__ */ T("span", {
|
|
177
286
|
className: "text-sm font-medium",
|
|
178
|
-
children:
|
|
179
|
-
})]
|
|
287
|
+
children: K("admin.tenantDetail.settings.dataRetentionDays", "{{days}} days", { days: Q.settings?.dataRetentionDays ?? 0 })
|
|
288
|
+
})]
|
|
180
289
|
})
|
|
181
290
|
]
|
|
291
|
+
}) })] }),
|
|
292
|
+
/* @__PURE__ */ T("div", {
|
|
293
|
+
id: "tenant-sso",
|
|
294
|
+
children: /* @__PURE__ */ T(ie, {
|
|
295
|
+
tenantId: Q.id,
|
|
296
|
+
canManage: G
|
|
297
|
+
})
|
|
298
|
+
}),
|
|
299
|
+
/* @__PURE__ */ T("div", {
|
|
300
|
+
id: "tenant-members",
|
|
301
|
+
children: /* @__PURE__ */ T(re, {
|
|
302
|
+
tenantId: Q.id,
|
|
303
|
+
tenantType: Q.type ?? "",
|
|
304
|
+
canManage: G
|
|
305
|
+
})
|
|
182
306
|
})
|
|
183
|
-
]
|
|
184
|
-
|
|
307
|
+
]
|
|
308
|
+
}), /* @__PURE__ */ T("div", {
|
|
309
|
+
className: "space-y-6",
|
|
310
|
+
children: /* @__PURE__ */ E(a, { children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
185
311
|
className: "text-lg",
|
|
186
|
-
children:
|
|
187
|
-
}) }), /* @__PURE__ */
|
|
312
|
+
children: K("admin.tenantDetail.actions.title", "Actions")
|
|
313
|
+
}) }), /* @__PURE__ */ E(o, {
|
|
188
314
|
className: "space-y-2",
|
|
189
|
-
children:
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
className: "grid gap-4 sm:grid-cols-2",
|
|
205
|
-
children: [
|
|
206
|
-
/* @__PURE__ */ M("div", {
|
|
207
|
-
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
208
|
-
children: [/* @__PURE__ */ j("span", {
|
|
209
|
-
className: "text-sm",
|
|
210
|
-
children: U("admin.tenantDetail.settings.allowSignup", "Allow Signup")
|
|
211
|
-
}), /* @__PURE__ */ j("span", {
|
|
212
|
-
className: `text-sm font-medium ${Q.settings?.allowSignup ? "text-success" : "text-text-secondary"}`,
|
|
213
|
-
children: Q.settings?.allowSignup ? U("admin.tenantDetail.settings.enabled", "Enabled") : U("admin.tenantDetail.settings.disabled", "Disabled")
|
|
214
|
-
})]
|
|
215
|
-
}),
|
|
216
|
-
/* @__PURE__ */ M("div", {
|
|
217
|
-
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
218
|
-
children: [/* @__PURE__ */ j("span", {
|
|
219
|
-
className: "text-sm",
|
|
220
|
-
children: U("admin.tenantDetail.settings.sso", "SSO")
|
|
221
|
-
}), /* @__PURE__ */ j("span", {
|
|
222
|
-
className: `text-sm font-medium ${Q.settings?.ssoEnabled ? "text-success" : "text-text-secondary"}`,
|
|
223
|
-
children: Q.settings?.ssoEnabled ? U("admin.tenantDetail.settings.enabled", "Enabled") : U("admin.tenantDetail.settings.disabled", "Disabled")
|
|
224
|
-
})]
|
|
225
|
-
}),
|
|
226
|
-
/* @__PURE__ */ M("div", {
|
|
227
|
-
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
228
|
-
children: [/* @__PURE__ */ j("span", {
|
|
229
|
-
className: "text-sm",
|
|
230
|
-
children: U("admin.tenantDetail.settings.mfaRequired", "MFA Required")
|
|
231
|
-
}), /* @__PURE__ */ j("span", {
|
|
232
|
-
className: `text-sm font-medium ${Q.settings?.mfaRequired ? "text-success" : "text-text-secondary"}`,
|
|
233
|
-
children: Q.settings?.mfaRequired ? U("admin.tenantDetail.settings.yes", "Yes") : U("admin.tenantDetail.settings.no", "No")
|
|
234
|
-
})]
|
|
235
|
-
}),
|
|
236
|
-
/* @__PURE__ */ M("div", {
|
|
237
|
-
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
238
|
-
children: [/* @__PURE__ */ j("span", {
|
|
239
|
-
className: "text-sm",
|
|
240
|
-
children: U("admin.tenantDetail.settings.dataRetention", "Data Retention")
|
|
241
|
-
}), /* @__PURE__ */ j("span", {
|
|
242
|
-
className: "text-sm font-medium",
|
|
243
|
-
children: U("admin.tenantDetail.settings.dataRetentionDays", "{{days}} days", { days: Q.settings?.dataRetentionDays ?? 0 })
|
|
244
|
-
})]
|
|
245
|
-
})
|
|
246
|
-
]
|
|
247
|
-
}) })] }),
|
|
248
|
-
/* @__PURE__ */ j(x, {
|
|
249
|
-
tenantId: Q.id,
|
|
250
|
-
canManage: I
|
|
251
|
-
}),
|
|
252
|
-
/* @__PURE__ */ j(b, {
|
|
253
|
-
tenantId: Q.id,
|
|
254
|
-
tenantType: Q.type ?? "",
|
|
255
|
-
canManage: I
|
|
256
|
-
})
|
|
257
|
-
]
|
|
258
|
-
}), /* @__PURE__ */ j("div", {
|
|
259
|
-
className: "space-y-6",
|
|
260
|
-
children: /* @__PURE__ */ M(a, { children: [/* @__PURE__ */ j(s, { children: /* @__PURE__ */ j(c, {
|
|
261
|
-
className: "text-lg",
|
|
262
|
-
children: U("admin.tenantDetail.actions.title", "Actions")
|
|
263
|
-
}) }), /* @__PURE__ */ M(o, {
|
|
264
|
-
className: "space-y-2",
|
|
265
|
-
children: [/* @__PURE__ */ M(i, {
|
|
266
|
-
variant: "outline",
|
|
267
|
-
className: "w-full justify-start",
|
|
268
|
-
onClick: () => z(m(B, `users?tenantId=${Q.id}`)),
|
|
269
|
-
children: [/* @__PURE__ */ j(re, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.actions.viewUsers", "View Users")]
|
|
270
|
-
}), /* @__PURE__ */ M(i, {
|
|
271
|
-
variant: "outline",
|
|
272
|
-
className: "w-full justify-start",
|
|
273
|
-
onClick: () => z(m(B, `billing/subscriptions?tenantId=${Q.id}`)),
|
|
274
|
-
children: [/* @__PURE__ */ j(w, { className: "mr-2 h-4 w-4" }), U("admin.tenantDetail.actions.viewBilling", "View Billing")]
|
|
275
|
-
})]
|
|
276
|
-
})] })
|
|
277
|
-
})]
|
|
278
|
-
})
|
|
315
|
+
children: [/* @__PURE__ */ E(i, {
|
|
316
|
+
variant: "outline",
|
|
317
|
+
className: "w-full justify-start",
|
|
318
|
+
onClick: () => L(f(R, `users?tenantId=${Q.id}`)),
|
|
319
|
+
children: [/* @__PURE__ */ T(ce, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.actions.viewUsers", "View Users")]
|
|
320
|
+
}), /* @__PURE__ */ E(i, {
|
|
321
|
+
variant: "outline",
|
|
322
|
+
className: "w-full justify-start",
|
|
323
|
+
onClick: () => L(f(R, `billing/subscriptions?tenantId=${Q.id}`)),
|
|
324
|
+
children: [/* @__PURE__ */ T(oe, { className: "mr-2 h-4 w-4" }), K("admin.tenantDetail.actions.viewBilling", "View Billing")]
|
|
325
|
+
})]
|
|
326
|
+
})] })
|
|
327
|
+
})]
|
|
328
|
+
})
|
|
329
|
+
]
|
|
279
330
|
})
|
|
331
|
+
}) : /* @__PURE__ */ T(l, {
|
|
332
|
+
title: K("admin.tenantDetail.featureDisabledTitle", "Tenant management unavailable"),
|
|
333
|
+
description: K("admin.tenantDetail.featureDisabled", "This feature is currently disabled."),
|
|
334
|
+
children: null
|
|
280
335
|
});
|
|
281
336
|
}
|
|
282
337
|
//#endregion
|
|
283
|
-
export {
|
|
338
|
+
export { N as TenantDetailPage };
|
|
284
339
|
|
|
285
340
|
//# sourceMappingURL=TenantDetailPage.js.map
|