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