@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.
@@ -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 { useState as o } from "react";
6
- import { Building as s, Loader2 as c, Plus as l, Search as u } from "lucide-react";
7
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
8
- import { EmphasisPanel as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
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 h() {
11
- let [h, g] = o(""), { data: _, loading: v, refetch: y } = i({ variables: {
12
- filter: h ? { search: h } : void 0,
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
- } }), [b] = a(), x = async (e, t) => {
15
- await b({ variables: {
15
+ } }), [S] = a(), C = async (e, t) => {
16
+ await S({ variables: {
16
17
  id: e,
17
18
  input: { status: t === "ACTIVE" ? "INACTIVE" : "ACTIVE" }
18
- } }), y();
19
- }, S = _?.allOrganizations?.items || [];
20
- return /* @__PURE__ */ d(r, {
21
- title: "Organizations",
22
- gradientWord: "Organizations",
23
- description: "Manage and monitor platform organizations",
24
- actions: /* @__PURE__ */ f(e, { children: [/* @__PURE__ */ d(l, { className: "mr-2 h-4 w-4" }), "Create Organization"] }),
25
- children: /* @__PURE__ */ f("div", {
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__ */ d(m, { children: "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." }),
29
- /* @__PURE__ */ f(p, {
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__ */ d("div", {
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__ */ d(s, { className: "h-6 w-6" })
34
- }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("div", {
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: _?.allOrganizations?.total ?? S.length
37
- }), /* @__PURE__ */ d("p", {
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__ */ d("div", {
43
+ /* @__PURE__ */ f("div", {
43
44
  className: "flex items-center justify-between",
44
- children: /* @__PURE__ */ f("div", {
45
+ children: /* @__PURE__ */ p("div", {
45
46
  className: "relative max-w-sm flex-1",
46
- children: [/* @__PURE__ */ d(u, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ d(n, {
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: h,
50
- onChange: (e) => g(e.target.value)
50
+ value: g,
51
+ onChange: (e) => _(e.target.value)
51
52
  })]
52
53
  })
53
54
  }),
54
- v ? /* @__PURE__ */ d("div", {
55
+ b ? /* @__PURE__ */ f("div", {
55
56
  className: "flex h-64 items-center justify-center",
56
- children: /* @__PURE__ */ d(c, { className: "h-8 w-8 animate-spin text-text-secondary" })
57
- }) : S.length > 0 ? /* @__PURE__ */ d("div", {
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__ */ f("table", {
60
+ children: /* @__PURE__ */ p("table", {
60
61
  className: "w-full text-sm",
61
- children: [/* @__PURE__ */ d("thead", { children: /* @__PURE__ */ f("tr", {
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__ */ d("th", {
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__ */ d("th", {
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__ */ d("th", {
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__ */ d("th", {
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__ */ d("th", {
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__ */ d("tbody", { children: S.map((t) => /* @__PURE__ */ f("tr", {
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__ */ d("td", {
89
+ /* @__PURE__ */ f("td", {
89
90
  className: "p-4 font-medium",
90
91
  children: t.name
91
92
  }),
92
- /* @__PURE__ */ d("td", {
93
+ /* @__PURE__ */ f("td", {
93
94
  className: "p-4 text-text-secondary",
94
95
  children: t.slug
95
96
  }),
96
- /* @__PURE__ */ d("td", {
97
+ /* @__PURE__ */ f("td", {
97
98
  className: "p-4",
98
- children: /* @__PURE__ */ d("span", {
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__ */ d("td", {
104
+ /* @__PURE__ */ f("td", {
104
105
  className: "p-4 text-text-secondary",
105
106
  children: new Date(t.createdAt).toLocaleDateString()
106
107
  }),
107
- /* @__PURE__ */ d("td", {
108
+ /* @__PURE__ */ f("td", {
108
109
  className: "p-4 text-right",
109
- children: /* @__PURE__ */ d(e, {
110
+ children: /* @__PURE__ */ f(e, {
110
111
  variant: "outline",
111
112
  size: "sm",
112
- onClick: () => x(t.id, t.status),
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__ */ d(t, {
120
+ }) : /* @__PURE__ */ f(t, {
120
121
  illustration: "empty-data",
121
- icon: /* @__PURE__ */ d(s, { className: "h-8 w-8" }),
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 { h as OrganizationsListPage };
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=\"Organizations\"\n gradientWord=\"Organizations\"\n description=\"Manage and monitor platform organizations\"\n actions={\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Organization\n </Button>\n }\n >\n <div className=\"space-y-4\">\n <PagePurpose>\n Organizations group people and workspaces within a tenant — think of a company&apos;s\n departments or a customer&apos;s teams. Use this page to find an organization, review\n whether it is active, and toggle access on or off without touching the tenant itself.\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\">\n {data?.allOrganizations?.total ?? organizations.length}\n </div>\n <p className=\"text-sm text-text-secondary\">organizations on the platform</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=\"Search organizations...\"\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\">Name</th>\n <th className=\"p-4 font-medium\">Slug</th>\n <th className=\"p-4 font-medium\">Status</th>\n <th className=\"p-4 font-medium\">Created At</th>\n <th className=\"p-4 font-medium text-right\">Actions</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}\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 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=\"No organizations found\"\n description=\"Organizations will appear here when they are created\"\n />\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
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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"}