@burdenoff/microfe-admin 2026.626.1 → 2026.720.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/ConfirmDialog.js.map +1 -1
- package/dist/admin/components/DataTable.js.map +1 -1
- package/dist/admin/components/MarkdownEditor.js +116 -0
- package/dist/admin/components/MarkdownEditor.js.map +1 -0
- package/dist/admin/components/index.js +1 -0
- package/dist/admin/constants/featureFlags.js +12 -0
- package/dist/admin/constants/featureFlags.js.map +1 -0
- package/dist/admin/pages/AuditLogsPage.js.map +1 -1
- package/dist/admin/pages/CommunicationsPage.js.map +1 -1
- package/dist/admin/pages/ContentPagesPage.js +197 -197
- package/dist/admin/pages/ContentPagesPage.js.map +1 -1
- package/dist/admin/pages/DashboardPage.js +5 -5
- package/dist/admin/pages/FeatureFlagsPage.js.map +1 -1
- package/dist/admin/pages/ReferralsPage.js.map +1 -1
- package/dist/admin/pages/RolesPermissionsPage.js.map +1 -1
- package/dist/admin/pages/SREPage.js.map +1 -1
- package/dist/admin/pages/SandboxSettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage.js +6 -6
- package/dist/admin/pages/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SyncFailuresPage.js.map +1 -1
- package/dist/admin/pages/TenantDetailPage.js +169 -157
- package/dist/admin/pages/TenantDetailPage.js.map +1 -1
- package/dist/admin/pages/TenantFormRoutePage.js +75 -74
- package/dist/admin/pages/TenantFormRoutePage.js.map +1 -1
- package/dist/admin/pages/TenantsListPage.js +169 -157
- package/dist/admin/pages/TenantsListPage.js.map +1 -1
- package/dist/admin/pages/UsersListPage.js +5 -5
- package/package.json +2 -2
|
@@ -1,215 +1,223 @@
|
|
|
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 {
|
|
22
|
-
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";
|
|
23
25
|
//#region src/admin/pages/TenantDetailPage.tsx
|
|
24
|
-
function
|
|
25
|
-
let { canViewTenants:
|
|
26
|
-
variables: { id:
|
|
27
|
-
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,
|
|
28
30
|
fetchPolicy: "cache-and-network"
|
|
29
|
-
}), [
|
|
30
|
-
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;
|
|
31
33
|
let e = Q?.slug;
|
|
32
34
|
try {
|
|
33
|
-
await
|
|
34
|
-
tenantId:
|
|
35
|
+
await pe({ variables: { id: I } }), _(Z, "tenant.tenant.suspended", {
|
|
36
|
+
tenantId: I,
|
|
35
37
|
tenantSlug: e,
|
|
36
38
|
status: "SUSPENDED"
|
|
37
|
-
}),
|
|
39
|
+
}), z.success(K("admin.tenantDetail.toast.suspendedTitle", "Tenant suspended"), K("admin.tenantDetail.toast.suspendedDescription", "{{name}} has been suspended.", { name: Q?.name ?? "" }));
|
|
38
40
|
} catch (e) {
|
|
39
|
-
|
|
41
|
+
z.error(K("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : K("admin.tenantDetail.toast.suspendFailed", "Failed to suspend tenant."));
|
|
40
42
|
}
|
|
41
|
-
},
|
|
42
|
-
if (!
|
|
43
|
+
}, ge = async () => {
|
|
44
|
+
if (!I) return;
|
|
43
45
|
let e = Q?.slug;
|
|
44
46
|
try {
|
|
45
|
-
await
|
|
46
|
-
tenantId:
|
|
47
|
+
await me({ variables: { id: I } }), _(Z, "tenant.tenant.activated", {
|
|
48
|
+
tenantId: I,
|
|
47
49
|
tenantSlug: e,
|
|
48
50
|
status: "ACTIVE"
|
|
49
|
-
}),
|
|
51
|
+
}), z.success(K("admin.tenantDetail.toast.activatedTitle", "Tenant activated"), K("admin.tenantDetail.toast.activatedDescription", "{{name}} has been activated.", { name: Q?.name ?? "" }));
|
|
50
52
|
} catch (e) {
|
|
51
|
-
|
|
53
|
+
z.error(K("admin.tenantDetail.toast.errorTitle", "Error"), e instanceof Error ? e.message : K("admin.tenantDetail.toast.activateFailed", "Failed to activate tenant."));
|
|
52
54
|
}
|
|
53
|
-
}, $ =
|
|
54
|
-
return /* @__PURE__ */
|
|
55
|
-
allowed:
|
|
56
|
-
isLoading:
|
|
57
|
-
pageTitle:
|
|
58
|
-
denyMessage:
|
|
59
|
-
children:
|
|
60
|
-
|
|
61
|
-
|
|
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", {
|
|
62
70
|
className: "flex h-64 items-center justify-center",
|
|
63
|
-
children: /* @__PURE__ */
|
|
71
|
+
children: /* @__PURE__ */ T(S, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
64
72
|
})
|
|
65
|
-
}) : J || !Q ? /* @__PURE__ */
|
|
66
|
-
title:
|
|
67
|
-
description:
|
|
68
|
-
children: [J && /* @__PURE__ */
|
|
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", {
|
|
69
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",
|
|
70
78
|
children: J.message
|
|
71
|
-
}), /* @__PURE__ */
|
|
79
|
+
}), /* @__PURE__ */ E(i, {
|
|
72
80
|
variant: "outline",
|
|
73
|
-
onClick: () =>
|
|
74
|
-
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")]
|
|
75
83
|
})]
|
|
76
|
-
}) : /* @__PURE__ */
|
|
84
|
+
}) : /* @__PURE__ */ E(l, {
|
|
77
85
|
title: Q.name,
|
|
78
|
-
description:
|
|
79
|
-
actions: /* @__PURE__ */
|
|
86
|
+
description: K("admin.tenantDetail.tenantId", "Tenant ID: {{id}}", { id: Q.id }),
|
|
87
|
+
actions: /* @__PURE__ */ E("div", {
|
|
80
88
|
className: "flex items-center gap-2",
|
|
81
89
|
children: [
|
|
82
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ E(i, {
|
|
83
91
|
variant: "outline",
|
|
84
|
-
onClick: () =>
|
|
85
|
-
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")]
|
|
86
94
|
}),
|
|
87
|
-
|
|
95
|
+
G && /* @__PURE__ */ E(i, {
|
|
88
96
|
variant: "outline",
|
|
89
|
-
onClick: () =>
|
|
90
|
-
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")]
|
|
91
99
|
}),
|
|
92
|
-
|
|
100
|
+
de && (Q.status === "active" ? /* @__PURE__ */ E(i, {
|
|
93
101
|
variant: "outline",
|
|
94
102
|
className: "text-status-warning-text",
|
|
95
|
-
onClick:
|
|
103
|
+
onClick: he,
|
|
96
104
|
disabled: Y,
|
|
97
|
-
children: [Y ? /* @__PURE__ */
|
|
98
|
-
}) : /* @__PURE__ */
|
|
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, {
|
|
99
107
|
variant: "outline",
|
|
100
108
|
className: "text-status-success-text",
|
|
101
|
-
onClick:
|
|
109
|
+
onClick: ge,
|
|
102
110
|
disabled: X,
|
|
103
|
-
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")]
|
|
104
112
|
}))
|
|
105
113
|
]
|
|
106
114
|
}),
|
|
107
115
|
children: [
|
|
108
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ T(j, {
|
|
109
117
|
className: "mb-6",
|
|
110
|
-
children:
|
|
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.")
|
|
111
119
|
}),
|
|
112
|
-
/* @__PURE__ */ A
|
|
120
|
+
/* @__PURE__ */ T(A, {
|
|
113
121
|
storageKey: "admin-tenant-detail",
|
|
114
122
|
steps: [
|
|
115
123
|
{
|
|
116
124
|
id: "edit-tenant",
|
|
117
|
-
label:
|
|
118
|
-
description:
|
|
119
|
-
onClick: () =>
|
|
120
|
-
done: !
|
|
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
|
|
121
129
|
},
|
|
122
130
|
{
|
|
123
131
|
id: "review-members",
|
|
124
|
-
label:
|
|
125
|
-
description:
|
|
132
|
+
label: K("admin.tenantDetail.nextSteps.members", "Review members"),
|
|
133
|
+
description: K("admin.tenantDetail.nextSteps.membersDesc", "Check who has access inside this tenant."),
|
|
126
134
|
href: "#tenant-members"
|
|
127
135
|
},
|
|
128
136
|
{
|
|
129
137
|
id: "configure-sso",
|
|
130
|
-
label:
|
|
131
|
-
description:
|
|
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."),
|
|
132
140
|
href: "#tenant-sso"
|
|
133
141
|
}
|
|
134
142
|
]
|
|
135
143
|
}),
|
|
136
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ E("div", {
|
|
137
145
|
className: "grid gap-6 lg:grid-cols-3",
|
|
138
|
-
children: [/* @__PURE__ */
|
|
146
|
+
children: [/* @__PURE__ */ E("div", {
|
|
139
147
|
className: "space-y-6 lg:col-span-2",
|
|
140
148
|
children: [
|
|
141
|
-
/* @__PURE__ */
|
|
149
|
+
/* @__PURE__ */ T(k, {
|
|
142
150
|
className: "p-0",
|
|
143
|
-
children: /* @__PURE__ */
|
|
151
|
+
children: /* @__PURE__ */ E(a, {
|
|
144
152
|
className: "border-0 bg-transparent shadow-none hover:border-0",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
153
|
+
children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
146
154
|
className: "text-lg",
|
|
147
|
-
children:
|
|
148
|
-
}) }), /* @__PURE__ */
|
|
149
|
-
/* @__PURE__ */
|
|
155
|
+
children: K("admin.tenantDetail.overview.title", "Overview")
|
|
156
|
+
}) }), /* @__PURE__ */ E(o, { children: [
|
|
157
|
+
/* @__PURE__ */ E("div", {
|
|
150
158
|
className: "flex items-start gap-4",
|
|
151
|
-
children: [/* @__PURE__ */
|
|
159
|
+
children: [/* @__PURE__ */ T(r, {
|
|
152
160
|
fallback: Q.name.slice(0, 2).toUpperCase(),
|
|
153
161
|
size: "lg"
|
|
154
|
-
}), /* @__PURE__ */
|
|
162
|
+
}), /* @__PURE__ */ E("div", {
|
|
155
163
|
className: "flex-1 space-y-4",
|
|
156
|
-
children: [/* @__PURE__ */
|
|
164
|
+
children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h2", {
|
|
157
165
|
className: "text-xl font-semibold text-text-primary",
|
|
158
166
|
children: Q.name
|
|
159
|
-
}), /* @__PURE__ */
|
|
167
|
+
}), /* @__PURE__ */ E("p", {
|
|
160
168
|
className: "text-sm text-text-secondary",
|
|
161
169
|
children: ["@", Q.slug]
|
|
162
|
-
})] }), /* @__PURE__ */
|
|
170
|
+
})] }), /* @__PURE__ */ E("div", {
|
|
163
171
|
className: "flex flex-wrap items-center gap-4",
|
|
164
|
-
children: [/* @__PURE__ */
|
|
172
|
+
children: [/* @__PURE__ */ T(te, { status: Q.status }), Q.plan && /* @__PURE__ */ T("span", {
|
|
165
173
|
className: "rounded-md bg-action-primary-bg/10 px-2 py-1 text-xs font-medium text-primary",
|
|
166
174
|
children: Q.plan
|
|
167
175
|
})]
|
|
168
176
|
})]
|
|
169
177
|
})]
|
|
170
178
|
}),
|
|
171
|
-
/* @__PURE__ */
|
|
172
|
-
/* @__PURE__ */
|
|
179
|
+
/* @__PURE__ */ T(ee, { className: "my-6" }),
|
|
180
|
+
/* @__PURE__ */ E("div", {
|
|
173
181
|
className: "grid gap-4 sm:grid-cols-2",
|
|
174
182
|
children: [
|
|
175
|
-
Q.ownerEmail && /* @__PURE__ */
|
|
183
|
+
Q.ownerEmail && /* @__PURE__ */ E("div", {
|
|
176
184
|
className: "flex items-center gap-3",
|
|
177
|
-
children: [/* @__PURE__ */
|
|
185
|
+
children: [/* @__PURE__ */ T(C, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
178
186
|
className: "text-xs text-text-secondary",
|
|
179
|
-
children:
|
|
180
|
-
}), /* @__PURE__ */
|
|
187
|
+
children: K("admin.tenantDetail.overview.ownerEmail", "Owner Email")
|
|
188
|
+
}), /* @__PURE__ */ T("p", {
|
|
181
189
|
className: "text-sm font-medium",
|
|
182
190
|
children: Q.ownerEmail
|
|
183
191
|
})] })]
|
|
184
192
|
}),
|
|
185
|
-
Q.domain && /* @__PURE__ */
|
|
193
|
+
Q.domain && /* @__PURE__ */ E("div", {
|
|
186
194
|
className: "flex items-center gap-3",
|
|
187
|
-
children: [/* @__PURE__ */
|
|
195
|
+
children: [/* @__PURE__ */ T(x, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
188
196
|
className: "text-xs text-text-secondary",
|
|
189
|
-
children:
|
|
190
|
-
}), /* @__PURE__ */
|
|
197
|
+
children: K("admin.tenantDetail.overview.domain", "Domain")
|
|
198
|
+
}), /* @__PURE__ */ T("p", {
|
|
191
199
|
className: "text-sm font-medium",
|
|
192
200
|
children: Q.domain
|
|
193
201
|
})] })]
|
|
194
202
|
}),
|
|
195
|
-
/* @__PURE__ */
|
|
203
|
+
/* @__PURE__ */ E("div", {
|
|
196
204
|
className: "flex items-center gap-3",
|
|
197
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ T(b, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
198
206
|
className: "text-xs text-text-secondary",
|
|
199
|
-
children:
|
|
200
|
-
}), /* @__PURE__ */
|
|
207
|
+
children: K("admin.tenantDetail.overview.created", "Created")
|
|
208
|
+
}), /* @__PURE__ */ T("p", {
|
|
201
209
|
className: "text-sm font-medium",
|
|
202
|
-
children:
|
|
210
|
+
children: u(Q.createdAt)
|
|
203
211
|
})] })]
|
|
204
212
|
}),
|
|
205
|
-
/* @__PURE__ */
|
|
213
|
+
/* @__PURE__ */ E("div", {
|
|
206
214
|
className: "flex items-center gap-3",
|
|
207
|
-
children: [/* @__PURE__ */
|
|
215
|
+
children: [/* @__PURE__ */ T(b, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
208
216
|
className: "text-xs text-text-secondary",
|
|
209
|
-
children:
|
|
210
|
-
}), /* @__PURE__ */
|
|
217
|
+
children: K("admin.tenantDetail.overview.lastUpdated", "Last Updated")
|
|
218
|
+
}), /* @__PURE__ */ T("p", {
|
|
211
219
|
className: "text-sm font-medium",
|
|
212
|
-
children:
|
|
220
|
+
children: u(Q.updatedAt)
|
|
213
221
|
})] })]
|
|
214
222
|
})
|
|
215
223
|
]
|
|
@@ -217,112 +225,116 @@ function L() {
|
|
|
217
225
|
] })]
|
|
218
226
|
})
|
|
219
227
|
}),
|
|
220
|
-
$.length > 0 && /* @__PURE__ */
|
|
228
|
+
$.length > 0 && /* @__PURE__ */ E(a, { children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
221
229
|
className: "text-lg",
|
|
222
|
-
children:
|
|
223
|
-
}) }), /* @__PURE__ */
|
|
230
|
+
children: K("admin.tenantDetail.workspaces.title", "Workspaces ({{count}})", { count: $.length })
|
|
231
|
+
}) }), /* @__PURE__ */ T(o, { children: /* @__PURE__ */ T("div", {
|
|
224
232
|
className: "space-y-2",
|
|
225
|
-
children: $.map((e) => /* @__PURE__ */
|
|
233
|
+
children: $.map((e) => /* @__PURE__ */ E("div", {
|
|
226
234
|
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
227
|
-
children: [/* @__PURE__ */
|
|
235
|
+
children: [/* @__PURE__ */ T("span", {
|
|
228
236
|
className: "text-sm font-medium",
|
|
229
237
|
children: e.name
|
|
230
|
-
}), /* @__PURE__ */
|
|
238
|
+
}), /* @__PURE__ */ T("span", {
|
|
231
239
|
className: "text-xs text-text-secondary capitalize",
|
|
232
240
|
children: e.status?.toLowerCase()
|
|
233
241
|
})]
|
|
234
242
|
}, e.id))
|
|
235
243
|
}) })] }),
|
|
236
|
-
Q.settings && /* @__PURE__ */
|
|
244
|
+
Q.settings && /* @__PURE__ */ E(a, { children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
237
245
|
className: "text-lg",
|
|
238
|
-
children:
|
|
239
|
-
}) }), /* @__PURE__ */
|
|
246
|
+
children: K("admin.tenantDetail.settings.title", "Settings")
|
|
247
|
+
}) }), /* @__PURE__ */ T(o, { children: /* @__PURE__ */ E("div", {
|
|
240
248
|
className: "grid gap-4 sm:grid-cols-2",
|
|
241
249
|
children: [
|
|
242
|
-
/* @__PURE__ */
|
|
250
|
+
/* @__PURE__ */ E("div", {
|
|
243
251
|
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
244
|
-
children: [/* @__PURE__ */
|
|
252
|
+
children: [/* @__PURE__ */ T("span", {
|
|
245
253
|
className: "text-sm",
|
|
246
|
-
children:
|
|
247
|
-
}), /* @__PURE__ */
|
|
254
|
+
children: K("admin.tenantDetail.settings.allowSignup", "Allow Signup")
|
|
255
|
+
}), /* @__PURE__ */ T("span", {
|
|
248
256
|
className: `text-sm font-medium ${Q.settings?.allowSignup ? "text-status-success-text" : "text-text-secondary"}`,
|
|
249
|
-
children: Q.settings?.allowSignup ?
|
|
257
|
+
children: Q.settings?.allowSignup ? K("admin.tenantDetail.settings.enabled", "Enabled") : K("admin.tenantDetail.settings.disabled", "Disabled")
|
|
250
258
|
})]
|
|
251
259
|
}),
|
|
252
|
-
/* @__PURE__ */
|
|
260
|
+
/* @__PURE__ */ E("div", {
|
|
253
261
|
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
254
|
-
children: [/* @__PURE__ */
|
|
262
|
+
children: [/* @__PURE__ */ T("span", {
|
|
255
263
|
className: "text-sm",
|
|
256
|
-
children:
|
|
257
|
-
}), /* @__PURE__ */
|
|
264
|
+
children: K("admin.tenantDetail.settings.sso", "SSO")
|
|
265
|
+
}), /* @__PURE__ */ T("span", {
|
|
258
266
|
className: `text-sm font-medium ${Q.settings?.ssoEnabled ? "text-status-success-text" : "text-text-secondary"}`,
|
|
259
|
-
children: Q.settings?.ssoEnabled ?
|
|
267
|
+
children: Q.settings?.ssoEnabled ? K("admin.tenantDetail.settings.enabled", "Enabled") : K("admin.tenantDetail.settings.disabled", "Disabled")
|
|
260
268
|
})]
|
|
261
269
|
}),
|
|
262
|
-
/* @__PURE__ */
|
|
270
|
+
/* @__PURE__ */ E("div", {
|
|
263
271
|
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
264
|
-
children: [/* @__PURE__ */
|
|
272
|
+
children: [/* @__PURE__ */ T("span", {
|
|
265
273
|
className: "text-sm",
|
|
266
|
-
children:
|
|
267
|
-
}), /* @__PURE__ */
|
|
274
|
+
children: K("admin.tenantDetail.settings.mfaRequired", "MFA Required")
|
|
275
|
+
}), /* @__PURE__ */ T("span", {
|
|
268
276
|
className: `text-sm font-medium ${Q.settings?.mfaRequired ? "text-status-success-text" : "text-text-secondary"}`,
|
|
269
|
-
children: Q.settings?.mfaRequired ?
|
|
277
|
+
children: Q.settings?.mfaRequired ? K("admin.tenantDetail.settings.yes", "Yes") : K("admin.tenantDetail.settings.no", "No")
|
|
270
278
|
})]
|
|
271
279
|
}),
|
|
272
|
-
/* @__PURE__ */
|
|
280
|
+
/* @__PURE__ */ E("div", {
|
|
273
281
|
className: "flex items-center justify-between rounded-lg border border-border-subtle p-3",
|
|
274
|
-
children: [/* @__PURE__ */
|
|
282
|
+
children: [/* @__PURE__ */ T("span", {
|
|
275
283
|
className: "text-sm",
|
|
276
|
-
children:
|
|
277
|
-
}), /* @__PURE__ */
|
|
284
|
+
children: K("admin.tenantDetail.settings.dataRetention", "Data Retention")
|
|
285
|
+
}), /* @__PURE__ */ T("span", {
|
|
278
286
|
className: "text-sm font-medium",
|
|
279
|
-
children:
|
|
287
|
+
children: K("admin.tenantDetail.settings.dataRetentionDays", "{{days}} days", { days: Q.settings?.dataRetentionDays ?? 0 })
|
|
280
288
|
})]
|
|
281
289
|
})
|
|
282
290
|
]
|
|
283
291
|
}) })] }),
|
|
284
|
-
/* @__PURE__ */
|
|
292
|
+
/* @__PURE__ */ T("div", {
|
|
285
293
|
id: "tenant-sso",
|
|
286
|
-
children: /* @__PURE__ */
|
|
294
|
+
children: /* @__PURE__ */ T(ie, {
|
|
287
295
|
tenantId: Q.id,
|
|
288
|
-
canManage:
|
|
296
|
+
canManage: G
|
|
289
297
|
})
|
|
290
298
|
}),
|
|
291
|
-
/* @__PURE__ */
|
|
299
|
+
/* @__PURE__ */ T("div", {
|
|
292
300
|
id: "tenant-members",
|
|
293
|
-
children: /* @__PURE__ */
|
|
301
|
+
children: /* @__PURE__ */ T(re, {
|
|
294
302
|
tenantId: Q.id,
|
|
295
303
|
tenantType: Q.type ?? "",
|
|
296
|
-
canManage:
|
|
304
|
+
canManage: G
|
|
297
305
|
})
|
|
298
306
|
})
|
|
299
307
|
]
|
|
300
|
-
}), /* @__PURE__ */
|
|
308
|
+
}), /* @__PURE__ */ T("div", {
|
|
301
309
|
className: "space-y-6",
|
|
302
|
-
children: /* @__PURE__ */
|
|
310
|
+
children: /* @__PURE__ */ E(a, { children: [/* @__PURE__ */ T(s, { children: /* @__PURE__ */ T(c, {
|
|
303
311
|
className: "text-lg",
|
|
304
|
-
children:
|
|
305
|
-
}) }), /* @__PURE__ */
|
|
312
|
+
children: K("admin.tenantDetail.actions.title", "Actions")
|
|
313
|
+
}) }), /* @__PURE__ */ E(o, {
|
|
306
314
|
className: "space-y-2",
|
|
307
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ E(i, {
|
|
308
316
|
variant: "outline",
|
|
309
317
|
className: "w-full justify-start",
|
|
310
|
-
onClick: () =>
|
|
311
|
-
children: [/* @__PURE__ */
|
|
312
|
-
}), /* @__PURE__ */
|
|
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, {
|
|
313
321
|
variant: "outline",
|
|
314
322
|
className: "w-full justify-start",
|
|
315
|
-
onClick: () =>
|
|
316
|
-
children: [/* @__PURE__ */
|
|
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")]
|
|
317
325
|
})]
|
|
318
326
|
})] })
|
|
319
327
|
})]
|
|
320
328
|
})
|
|
321
329
|
]
|
|
322
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
|
|
323
335
|
});
|
|
324
336
|
}
|
|
325
337
|
//#endregion
|
|
326
|
-
export {
|
|
338
|
+
export { N as TenantDetailPage };
|
|
327
339
|
|
|
328
340
|
//# sourceMappingURL=TenantDetailPage.js.map
|