@burdenoff/microfe-admin 2026.805.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/AdminRoutes.js +28 -24
- package/dist/admin/AdminRoutes.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/useAdminPermissions.js +1 -0
- package/dist/admin/hooks/useAdminPermissions.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/ExploreConversationsPage.js +419 -0
- package/dist/admin/pages/ExploreConversationsPage.js.map +1 -0
- 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/dist/admin/pages/index.js +1 -0
- package/package.json +1 -1
|
@@ -2,131 +2,132 @@ import { Button as e, EmptyState as t, Input as n } from "../components/ui.js";
|
|
|
2
2
|
import { PageLayout as r } from "../components/PageLayout.js";
|
|
3
3
|
import "../components/index.js";
|
|
4
4
|
import { useListOrganizationsQuery as i, useUpdateOrganizationMutation as a } from "../../generated/global-operations.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import { useTr as o } from "../hooks/useTr.js";
|
|
6
|
+
import { useState as s } from "react";
|
|
7
|
+
import { Building as c, Loader2 as l, Plus as u, Search as d } from "lucide-react";
|
|
8
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
9
|
+
import { EmphasisPanel as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
|
|
9
10
|
//#region src/admin/pages/OrganizationsListPage.tsx
|
|
10
|
-
function
|
|
11
|
-
let [
|
|
12
|
-
filter:
|
|
11
|
+
function g() {
|
|
12
|
+
let [g, _] = s(""), v = o(), { data: y, loading: b, refetch: x } = i({ variables: {
|
|
13
|
+
filter: g ? { search: g } : void 0,
|
|
13
14
|
limit: 50
|
|
14
|
-
} }), [
|
|
15
|
-
await
|
|
15
|
+
} }), [S] = a(), C = async (e, t) => {
|
|
16
|
+
await S({ variables: {
|
|
16
17
|
id: e,
|
|
17
18
|
input: { status: t === "ACTIVE" ? "INACTIVE" : "ACTIVE" }
|
|
18
|
-
} }),
|
|
19
|
-
},
|
|
20
|
-
return /* @__PURE__ */
|
|
21
|
-
title: "Organizations",
|
|
22
|
-
gradientWord: "Organizations",
|
|
23
|
-
description: "Manage and monitor platform organizations",
|
|
24
|
-
actions: /* @__PURE__ */
|
|
25
|
-
children: /* @__PURE__ */
|
|
19
|
+
} }), x();
|
|
20
|
+
}, w = y?.allOrganizations?.items || [], T = y?.allOrganizations?.total ?? w.length;
|
|
21
|
+
return /* @__PURE__ */ f(r, {
|
|
22
|
+
title: v("adminMfe.organizations.title", "Organizations"),
|
|
23
|
+
gradientWord: v("adminMfe.organizations.title", "Organizations"),
|
|
24
|
+
description: v("adminMfe.organizations.description", "Manage and monitor platform organizations"),
|
|
25
|
+
actions: /* @__PURE__ */ p(e, { children: [/* @__PURE__ */ f(u, { className: "mr-2 h-4 w-4" }), v("adminMfe.organizations.create", "Create Organization")] }),
|
|
26
|
+
children: /* @__PURE__ */ p("div", {
|
|
26
27
|
className: "space-y-4",
|
|
27
28
|
children: [
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ f(h, { children: v("adminMfe.organizations.purpose", "Organizations group people and workspaces within a tenant — think of a company's departments or a customer's teams. Use this page to find an organization, review whether it is active, and toggle access on or off without touching the tenant itself.") }),
|
|
30
|
+
/* @__PURE__ */ p(m, {
|
|
30
31
|
className: "flex items-center gap-4 p-5",
|
|
31
|
-
children: [/* @__PURE__ */
|
|
32
|
+
children: [/* @__PURE__ */ f("div", {
|
|
32
33
|
className: "flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg/15 text-action-primary-bg",
|
|
33
|
-
children: /* @__PURE__ */
|
|
34
|
-
}), /* @__PURE__ */
|
|
34
|
+
children: /* @__PURE__ */ f(c, { className: "h-6 w-6" })
|
|
35
|
+
}), /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("div", {
|
|
35
36
|
className: "text-3xl font-bold tabular-nums text-text-primary",
|
|
36
|
-
children:
|
|
37
|
-
}), /* @__PURE__ */
|
|
37
|
+
children: T
|
|
38
|
+
}), /* @__PURE__ */ f("p", {
|
|
38
39
|
className: "text-sm text-text-secondary",
|
|
39
|
-
children: "organizations on the platform"
|
|
40
|
+
children: v("adminMfe.organizations.emphasis", "organizations on the platform")
|
|
40
41
|
})] })]
|
|
41
42
|
}),
|
|
42
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ f("div", {
|
|
43
44
|
className: "flex items-center justify-between",
|
|
44
|
-
children: /* @__PURE__ */
|
|
45
|
+
children: /* @__PURE__ */ p("div", {
|
|
45
46
|
className: "relative max-w-sm flex-1",
|
|
46
|
-
children: [/* @__PURE__ */ d
|
|
47
|
-
placeholder: "Search organizations...",
|
|
47
|
+
children: [/* @__PURE__ */ f(d, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ f(n, {
|
|
48
|
+
placeholder: v("adminMfe.organizations.searchPlaceholder", "Search organizations..."),
|
|
48
49
|
className: "pl-9",
|
|
49
|
-
value:
|
|
50
|
-
onChange: (e) =>
|
|
50
|
+
value: g,
|
|
51
|
+
onChange: (e) => _(e.target.value)
|
|
51
52
|
})]
|
|
52
53
|
})
|
|
53
54
|
}),
|
|
54
|
-
|
|
55
|
+
b ? /* @__PURE__ */ f("div", {
|
|
55
56
|
className: "flex h-64 items-center justify-center",
|
|
56
|
-
children: /* @__PURE__ */
|
|
57
|
-
}) :
|
|
57
|
+
children: /* @__PURE__ */ f(l, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
58
|
+
}) : w.length > 0 ? /* @__PURE__ */ f("div", {
|
|
58
59
|
className: "rounded-md border",
|
|
59
|
-
children: /* @__PURE__ */
|
|
60
|
+
children: /* @__PURE__ */ p("table", {
|
|
60
61
|
className: "w-full text-sm",
|
|
61
|
-
children: [/* @__PURE__ */
|
|
62
|
+
children: [/* @__PURE__ */ f("thead", { children: /* @__PURE__ */ p("tr", {
|
|
62
63
|
className: "border-b bg-bg-sunken/50 text-left",
|
|
63
64
|
children: [
|
|
64
|
-
/* @__PURE__ */
|
|
65
|
+
/* @__PURE__ */ f("th", {
|
|
65
66
|
className: "p-4 font-medium",
|
|
66
|
-
children: "Name"
|
|
67
|
+
children: v("adminMfe.organizations.table.name", "Name")
|
|
67
68
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ f("th", {
|
|
69
70
|
className: "p-4 font-medium",
|
|
70
|
-
children: "Slug"
|
|
71
|
+
children: v("adminMfe.organizations.table.slug", "Slug")
|
|
71
72
|
}),
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ f("th", {
|
|
73
74
|
className: "p-4 font-medium",
|
|
74
|
-
children: "Status"
|
|
75
|
+
children: v("adminMfe.organizations.table.status", "Status")
|
|
75
76
|
}),
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ f("th", {
|
|
77
78
|
className: "p-4 font-medium",
|
|
78
|
-
children: "Created At"
|
|
79
|
+
children: v("adminMfe.organizations.table.createdAt", "Created At")
|
|
79
80
|
}),
|
|
80
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ f("th", {
|
|
81
82
|
className: "p-4 font-medium text-right",
|
|
82
|
-
children: "Actions"
|
|
83
|
+
children: v("adminMfe.organizations.table.actions", "Actions")
|
|
83
84
|
})
|
|
84
85
|
]
|
|
85
|
-
}) }), /* @__PURE__ */
|
|
86
|
+
}) }), /* @__PURE__ */ f("tbody", { children: w.map((t) => /* @__PURE__ */ p("tr", {
|
|
86
87
|
className: "border-b transition-colors hover:bg-bg-sunken/50",
|
|
87
88
|
children: [
|
|
88
|
-
/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ f("td", {
|
|
89
90
|
className: "p-4 font-medium",
|
|
90
91
|
children: t.name
|
|
91
92
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
93
|
+
/* @__PURE__ */ f("td", {
|
|
93
94
|
className: "p-4 text-text-secondary",
|
|
94
95
|
children: t.slug
|
|
95
96
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
97
|
+
/* @__PURE__ */ f("td", {
|
|
97
98
|
className: "p-4",
|
|
98
|
-
children: /* @__PURE__ */
|
|
99
|
+
children: /* @__PURE__ */ f("span", {
|
|
99
100
|
className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold ${t.status === "ACTIVE" ? "bg-status-success-bg text-status-success-text border border-status-success-border" : "bg-status-error-bg text-status-error-text border border-status-error-border"}`,
|
|
100
|
-
children: t.status
|
|
101
|
+
children: t.status === "ACTIVE" ? v("adminMfe.organizations.active", "Active") : v("adminMfe.organizations.inactive", "Inactive")
|
|
101
102
|
})
|
|
102
103
|
}),
|
|
103
|
-
/* @__PURE__ */
|
|
104
|
+
/* @__PURE__ */ f("td", {
|
|
104
105
|
className: "p-4 text-text-secondary",
|
|
105
106
|
children: new Date(t.createdAt).toLocaleDateString()
|
|
106
107
|
}),
|
|
107
|
-
/* @__PURE__ */
|
|
108
|
+
/* @__PURE__ */ f("td", {
|
|
108
109
|
className: "p-4 text-right",
|
|
109
|
-
children: /* @__PURE__ */
|
|
110
|
+
children: /* @__PURE__ */ f(e, {
|
|
110
111
|
variant: "outline",
|
|
111
112
|
size: "sm",
|
|
112
|
-
onClick: () =>
|
|
113
|
-
children: "Toggle Status"
|
|
113
|
+
onClick: () => C(t.id, t.status),
|
|
114
|
+
children: v("adminMfe.organizations.toggleStatus", "Toggle Status")
|
|
114
115
|
})
|
|
115
116
|
})
|
|
116
117
|
]
|
|
117
118
|
}, t.id)) })]
|
|
118
119
|
})
|
|
119
|
-
}) : /* @__PURE__ */
|
|
120
|
+
}) : /* @__PURE__ */ f(t, {
|
|
120
121
|
illustration: "empty-data",
|
|
121
|
-
icon: /* @__PURE__ */
|
|
122
|
-
title: "No organizations found",
|
|
123
|
-
description: "Organizations will appear here when they are created"
|
|
122
|
+
icon: /* @__PURE__ */ f(c, { className: "h-8 w-8" }),
|
|
123
|
+
title: v("adminMfe.organizations.empty.title", "No organizations found"),
|
|
124
|
+
description: v("adminMfe.organizations.empty.description", "Organizations will appear here when they are created")
|
|
124
125
|
})
|
|
125
126
|
]
|
|
126
127
|
})
|
|
127
128
|
});
|
|
128
129
|
}
|
|
129
130
|
//#endregion
|
|
130
|
-
export {
|
|
131
|
+
export { g as OrganizationsListPage };
|
|
131
132
|
|
|
132
133
|
//# sourceMappingURL=OrganizationsListPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganizationsListPage.js","names":[],"sources":["../../../src/admin/pages/OrganizationsListPage.tsx"],"sourcesContent":["import { Building, Search, Plus, Loader2 } from 'lucide-react';\nimport { PageLayout, Input, Button, EmptyState } from '../components';\nimport { PagePurpose, EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport {\n useListOrganizationsQuery,\n useUpdateOrganizationMutation,\n} from '../../generated/global-operations';\nimport { useState } from 'react';\n\nexport function OrganizationsListPage() {\n const [searchTerm, setSearchTerm] = useState('');\n const { data, loading, refetch } = useListOrganizationsQuery({\n variables: {\n filter: searchTerm ? { search: searchTerm } : undefined,\n limit: 50,\n },\n });\n\n const [updateOrganization] = useUpdateOrganizationMutation();\n\n const handleToggleStatus = async (id: string, currentStatus: string) => {\n const newStatus = currentStatus === 'ACTIVE' ? 'INACTIVE' : 'ACTIVE';\n await updateOrganization({\n variables: {\n id,\n input: { status: newStatus },\n },\n });\n refetch();\n };\n\n const organizations = data?.allOrganizations?.items || [];\n\n return (\n <PageLayout\n title
|
|
1
|
+
{"version":3,"file":"OrganizationsListPage.js","names":[],"sources":["../../../src/admin/pages/OrganizationsListPage.tsx"],"sourcesContent":["import { Building, Search, Plus, Loader2 } from 'lucide-react';\nimport { PageLayout, Input, Button, EmptyState } from '../components';\nimport { PagePurpose, EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport {\n useListOrganizationsQuery,\n useUpdateOrganizationMutation,\n} from '../../generated/global-operations';\nimport { useState } from 'react';\nimport { useTr } from '../hooks/useTr';\n\nexport function OrganizationsListPage() {\n const [searchTerm, setSearchTerm] = useState('');\n const tr = useTr();\n const { data, loading, refetch } = useListOrganizationsQuery({\n variables: {\n filter: searchTerm ? { search: searchTerm } : undefined,\n limit: 50,\n },\n });\n\n const [updateOrganization] = useUpdateOrganizationMutation();\n\n const handleToggleStatus = async (id: string, currentStatus: string) => {\n const newStatus = currentStatus === 'ACTIVE' ? 'INACTIVE' : 'ACTIVE';\n await updateOrganization({\n variables: {\n id,\n input: { status: newStatus },\n },\n });\n refetch();\n };\n\n const organizations = data?.allOrganizations?.items || [];\n const total = data?.allOrganizations?.total ?? organizations.length;\n\n return (\n <PageLayout\n title={tr('adminMfe.organizations.title', 'Organizations')}\n gradientWord={tr('adminMfe.organizations.title', 'Organizations')}\n description={tr(\n 'adminMfe.organizations.description',\n 'Manage and monitor platform organizations'\n )}\n actions={\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n {tr('adminMfe.organizations.create', 'Create Organization')}\n </Button>\n }\n >\n <div className=\"space-y-4\">\n <PagePurpose>\n {tr(\n 'adminMfe.organizations.purpose',\n \"Organizations group people and workspaces within a tenant — think of a company's departments or a customer's teams. Use this page to find an organization, review whether it is active, and toggle access on or off without touching the tenant itself.\"\n )}\n </PagePurpose>\n\n {/* Emphasis: how many organizations exist — the headline stat. */}\n <EmphasisPanel className=\"flex items-center gap-4 p-5\">\n <div className=\"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg/15 text-action-primary-bg\">\n <Building className=\"h-6 w-6\" />\n </div>\n <div>\n <div className=\"text-3xl font-bold tabular-nums text-text-primary\">{total}</div>\n <p className=\"text-sm text-text-secondary\">\n {tr('adminMfe.organizations.emphasis', 'organizations on the platform')}\n </p>\n </div>\n </EmphasisPanel>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder={tr(\n 'adminMfe.organizations.searchPlaceholder',\n 'Search organizations...'\n )}\n className=\"pl-9\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n />\n </div>\n </div>\n\n {loading ? (\n <div className=\"flex h-64 items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-text-secondary\" />\n </div>\n ) : organizations.length > 0 ? (\n <div className=\"rounded-md border\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50 text-left\">\n <th className=\"p-4 font-medium\">\n {tr('adminMfe.organizations.table.name', 'Name')}\n </th>\n <th className=\"p-4 font-medium\">\n {tr('adminMfe.organizations.table.slug', 'Slug')}\n </th>\n <th className=\"p-4 font-medium\">\n {tr('adminMfe.organizations.table.status', 'Status')}\n </th>\n <th className=\"p-4 font-medium\">\n {tr('adminMfe.organizations.table.createdAt', 'Created At')}\n </th>\n <th className=\"p-4 font-medium text-right\">\n {tr('adminMfe.organizations.table.actions', 'Actions')}\n </th>\n </tr>\n </thead>\n <tbody>\n {organizations.map((org: any) => (\n <tr key={org.id} className=\"border-b transition-colors hover:bg-bg-sunken/50\">\n <td className=\"p-4 font-medium\">{org.name}</td>\n <td className=\"p-4 text-text-secondary\">{org.slug}</td>\n <td className=\"p-4\">\n <span\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold ${\n org.status === 'ACTIVE'\n ? 'bg-status-success-bg text-status-success-text border border-status-success-border'\n : 'bg-status-error-bg text-status-error-text border border-status-error-border'\n }`}\n >\n {org.status === 'ACTIVE'\n ? tr('adminMfe.organizations.active', 'Active')\n : tr('adminMfe.organizations.inactive', 'Inactive')}\n </span>\n </td>\n <td className=\"p-4 text-text-secondary\">\n {new Date(org.createdAt).toLocaleDateString()}\n </td>\n <td className=\"p-4 text-right\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleToggleStatus(org.id, org.status)}\n >\n {tr('adminMfe.organizations.toggleStatus', 'Toggle Status')}\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-data\"\n icon={<Building className=\"h-8 w-8\" />}\n title={tr('adminMfe.organizations.empty.title', 'No organizations found')}\n description={tr(\n 'adminMfe.organizations.empty.description',\n 'Organizations will appear here when they are created'\n )}\n />\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|