@burdenoff/microfe-organization 2026.625.1 → 2026.625.3
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/organization-management/modules/members/components/InviteStatusBadge.js +6 -2
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js +16 -19
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MembersListPage.js +219 -220
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +40 -56
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +5 -1
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +36 -38
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +118 -113
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +5 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +168 -170
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +245 -243
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
- package/package.json +2 -2
- package/dist/organization-management/shared/components/feedback/EmptyState.js +0 -31
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +0 -1
|
@@ -5,229 +5,228 @@ import { SearchInput as r } from "../../../shared/components/input/SearchInput.j
|
|
|
5
5
|
import { SelectionCheckbox as i } from "../../../shared/components/input/SelectionCheckbox.js";
|
|
6
6
|
import { LoadingState as a } from "../../../shared/components/feedback/LoadingState.js";
|
|
7
7
|
import { ErrorState as o } from "../../../shared/components/feedback/ErrorState.js";
|
|
8
|
-
import {
|
|
9
|
-
import { useDebouncedValue as c } from "../../../shared/hooks/useDebouncedValue.js";
|
|
8
|
+
import { useDebouncedValue as s } from "../../../shared/hooks/useDebouncedValue.js";
|
|
10
9
|
import { useConfirmDialog as ee } from "../../../shared/components/dialog/ConfirmDialog.js";
|
|
11
|
-
import { PERMISSIONS as
|
|
12
|
-
import { MemberRoleBadge as
|
|
13
|
-
import { useMembers as te, useRemoveMember as
|
|
14
|
-
import { useEffect as
|
|
15
|
-
import { Eye as
|
|
16
|
-
import { GlassCard as
|
|
17
|
-
import { useFeatureFlagDetails as
|
|
18
|
-
import { usePermissions as
|
|
19
|
-
import { Fragment as
|
|
20
|
-
import { useParams as
|
|
21
|
-
import { ActorIdentity as
|
|
10
|
+
import { PERMISSIONS as c } from "../../../constants/permissions.js";
|
|
11
|
+
import { MemberRoleBadge as l } from "../components/MemberRoleBadge.js";
|
|
12
|
+
import { useMembers as te, useRemoveMember as u } from "../hooks/useMembers.js";
|
|
13
|
+
import { useEffect as d, useMemo as f, useState as p } from "react";
|
|
14
|
+
import { Eye as m, Mail as h, RefreshCw as g, Shield as _, Trash2 as v } from "lucide-react";
|
|
15
|
+
import { GlassCard as y, IllustratedEmptyState as ne } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { useFeatureFlagDetails as re } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
17
|
+
import { usePermissions as ie } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
18
|
+
import { Fragment as ae, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
19
|
+
import { useParams as S } from "react-router-dom";
|
|
20
|
+
import { ActorIdentity as oe, buildActorFallback as C, useActorProfiles as se } from "@burdenoff/fe-libs/shared";
|
|
22
21
|
//#region src/organization-management/modules/members/pages/MembersListPage.tsx
|
|
23
|
-
function
|
|
22
|
+
function ce() {
|
|
24
23
|
let e = n();
|
|
25
24
|
return (t) => t ? new Date(t).toLocaleDateString() : e("common.status.pending", "Pending");
|
|
26
25
|
}
|
|
27
|
-
function
|
|
28
|
-
let
|
|
26
|
+
function w() {
|
|
27
|
+
let w = n(), T = ce(), { navigate: E, basePath: D = "/organizations" } = e(), { hasPermission: O, isLoading: k } = ie(), A = re("organization.invite"), j = A ? !!A.value : !0, { organizationId: M } = S(), [N, le] = p(""), P = s(N, 250), [F, I] = p(/* @__PURE__ */ new Set()), { openConfirmDialog: L, ConfirmDialog: R } = ee(), { members: z, loading: B, error: V, refetch: H } = te(M ?? "", 50, 0), { removeMember: U, loading: W } = u(), { apiGatewayUrl: ue, authToken: de } = e(), G = se(f(() => z.map((e) => ({
|
|
29
28
|
actorId: e.userId,
|
|
30
29
|
actorType: "user"
|
|
31
|
-
})), [
|
|
32
|
-
apiGatewayUrl:
|
|
33
|
-
authToken:
|
|
34
|
-
orgId:
|
|
35
|
-
}), K =
|
|
36
|
-
if (!
|
|
37
|
-
let e =
|
|
38
|
-
return
|
|
30
|
+
})), [z]), {
|
|
31
|
+
apiGatewayUrl: ue,
|
|
32
|
+
authToken: de,
|
|
33
|
+
orgId: M
|
|
34
|
+
}), K = f(() => {
|
|
35
|
+
if (!P) return z;
|
|
36
|
+
let e = P.toLowerCase();
|
|
37
|
+
return z.filter((t) => {
|
|
39
38
|
let n = G[t.userId];
|
|
40
39
|
return n?.displayName.toLowerCase().includes(e) || n?.email?.toLowerCase().includes(e) ? !0 : t.userId.toLowerCase().includes(e) || t.role.toLowerCase().includes(e);
|
|
41
40
|
});
|
|
42
41
|
}, [
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
P,
|
|
43
|
+
z,
|
|
45
44
|
G
|
|
46
45
|
]);
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
d(() => {
|
|
47
|
+
I((e) => {
|
|
49
48
|
let t = new Set(K.map((e) => e.id)), n = new Set([...e].filter((e) => t.has(e)));
|
|
50
49
|
return n.size === e.size ? e : n;
|
|
51
50
|
});
|
|
52
51
|
}, [K]);
|
|
53
|
-
let q =
|
|
54
|
-
if (
|
|
52
|
+
let q = f(() => K.filter((e) => F.has(e.id)), [K, F]), J = K.length > 0 && K.every((e) => F.has(e.id)), Y = K.some((e) => F.has(e.id)) && !J, X = async (e) => {
|
|
53
|
+
if (M) try {
|
|
55
54
|
let n = (await Promise.allSettled(e.map(async (e) => {
|
|
56
|
-
let t = await
|
|
55
|
+
let t = await U(M, e);
|
|
57
56
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Failed to remove member");
|
|
58
57
|
}))).find((e) => e.status === "rejected");
|
|
59
58
|
if (n?.status === "rejected") throw n.reason;
|
|
60
|
-
|
|
59
|
+
I(/* @__PURE__ */ new Set()), await H(), t.success(e.length === 1 ? w("members.remove.successSingle", "Member removed successfully") : `${e.length} ${w("members.remove.successMany", "members removed successfully")}`);
|
|
61
60
|
} catch (e) {
|
|
62
|
-
t.error(e instanceof Error ? e.message :
|
|
61
|
+
t.error(e instanceof Error ? e.message : w("members.remove.failed", "Failed to remove member"));
|
|
63
62
|
}
|
|
64
63
|
}, Z = (e) => {
|
|
65
|
-
|
|
66
|
-
title:
|
|
67
|
-
description: `${
|
|
68
|
-
confirmText:
|
|
64
|
+
L({
|
|
65
|
+
title: w("members.remove.title", "Remove member"),
|
|
66
|
+
description: `${w("members.remove.descriptionPrefix", "Remove")} ${e} ${w("members.remove.descriptionSuffix", "from this organization? Workspace access inherited from this membership will be impacted.")}`,
|
|
67
|
+
confirmText: w("members.remove.confirm", "Remove"),
|
|
69
68
|
variant: "danger",
|
|
70
69
|
onConfirm: () => {
|
|
71
70
|
X([e]);
|
|
72
71
|
}
|
|
73
72
|
});
|
|
74
73
|
}, fe = () => {
|
|
75
|
-
q.length !== 0 &&
|
|
76
|
-
title:
|
|
77
|
-
description: `${
|
|
78
|
-
confirmText: `${
|
|
74
|
+
q.length !== 0 && L({
|
|
75
|
+
title: w("members.remove.bulkTitle", "Remove selected members"),
|
|
76
|
+
description: `${w("members.remove.bulkPrefix", "Remove")} ${q.length} ${w(q.length === 1 ? "members.remove.bulkSuffixSingle" : "members.remove.bulkSuffixMany", q.length === 1 ? "selected member from this organization?" : "selected members from this organization?")}`,
|
|
77
|
+
confirmText: `${w("members.remove.confirm", "Remove")} ${q.length}`,
|
|
79
78
|
variant: "danger",
|
|
80
79
|
onConfirm: () => {
|
|
81
80
|
X(q.map((e) => e.userId));
|
|
82
81
|
}
|
|
83
82
|
});
|
|
84
83
|
}, Q = (e, t) => {
|
|
85
|
-
|
|
84
|
+
I((n) => {
|
|
86
85
|
let r = new Set(n);
|
|
87
86
|
return t ? r.add(e) : r.delete(e), r;
|
|
88
87
|
});
|
|
89
88
|
}, $ = (e) => {
|
|
90
|
-
|
|
89
|
+
I((t) => {
|
|
91
90
|
let n = new Set(t);
|
|
92
91
|
return K.forEach((t) => {
|
|
93
92
|
e ? n.add(t.id) : n.delete(t.id);
|
|
94
93
|
}), n;
|
|
95
94
|
});
|
|
96
95
|
};
|
|
97
|
-
return
|
|
96
|
+
return M ? k ? /* @__PURE__ */ b("div", {
|
|
98
97
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
99
|
-
children: /* @__PURE__ */
|
|
100
|
-
}) :
|
|
98
|
+
children: /* @__PURE__ */ b(a, { message: w("common.loadingPermissions", "Loading permissions...") })
|
|
99
|
+
}) : O(c.MEMBER_LIST) ? B ? /* @__PURE__ */ b("div", {
|
|
101
100
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
102
|
-
children: /* @__PURE__ */
|
|
103
|
-
}) :
|
|
101
|
+
children: /* @__PURE__ */ b(a, { message: w("members.list.loading", "Loading members...") })
|
|
102
|
+
}) : V ? /* @__PURE__ */ b("div", {
|
|
104
103
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
105
|
-
children: /* @__PURE__ */
|
|
106
|
-
message:
|
|
104
|
+
children: /* @__PURE__ */ b(o, {
|
|
105
|
+
message: V.message,
|
|
107
106
|
action: {
|
|
108
|
-
label:
|
|
107
|
+
label: w("common.retry", "Retry"),
|
|
109
108
|
onClick: () => {
|
|
110
|
-
|
|
109
|
+
H();
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
})
|
|
114
|
-
}) : /* @__PURE__ */
|
|
113
|
+
}) : /* @__PURE__ */ x("div", {
|
|
115
114
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-200",
|
|
116
|
-
children: [/* @__PURE__ */
|
|
115
|
+
children: [/* @__PURE__ */ x("div", {
|
|
117
116
|
className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
|
|
118
117
|
children: [
|
|
119
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ x("div", {
|
|
120
119
|
className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
|
|
121
|
-
children: [/* @__PURE__ */
|
|
120
|
+
children: [/* @__PURE__ */ x("div", {
|
|
122
121
|
className: "space-y-2",
|
|
123
|
-
children: [/* @__PURE__ */
|
|
122
|
+
children: [/* @__PURE__ */ b("h1", {
|
|
124
123
|
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
125
|
-
children:
|
|
126
|
-
}), /* @__PURE__ */
|
|
124
|
+
children: w("members.list.title", "Members")
|
|
125
|
+
}), /* @__PURE__ */ b("p", {
|
|
127
126
|
className: "max-w-2xl text-[var(--color-text-secondary)]",
|
|
128
|
-
children:
|
|
127
|
+
children: w("members.list.subtitle", "Manage organization members, inspect their roles, and invite more people into this organization.")
|
|
129
128
|
})]
|
|
130
|
-
}),
|
|
129
|
+
}), j && O(c.MEMBER_INVITE) && /* @__PURE__ */ x("button", {
|
|
131
130
|
type: "button",
|
|
132
|
-
onClick: () =>
|
|
131
|
+
onClick: () => E(`${D}/${M}/members/invite`),
|
|
133
132
|
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90",
|
|
134
|
-
children: [/* @__PURE__ */
|
|
133
|
+
children: [/* @__PURE__ */ b(h, {
|
|
135
134
|
size: 18,
|
|
136
135
|
"aria-hidden": "true"
|
|
137
|
-
}), /* @__PURE__ */
|
|
136
|
+
}), /* @__PURE__ */ b("span", {
|
|
138
137
|
className: "font-medium",
|
|
139
|
-
children:
|
|
138
|
+
children: w("members.invite.button", "Invite Member")
|
|
140
139
|
})]
|
|
141
140
|
})]
|
|
142
141
|
}),
|
|
143
|
-
|
|
142
|
+
z.length > 0 ? /* @__PURE__ */ x("div", {
|
|
144
143
|
className: "grid grid-cols-2 gap-4",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
144
|
+
children: [/* @__PURE__ */ x(y, {
|
|
146
145
|
treatment: "metric",
|
|
147
146
|
className: "p-4",
|
|
148
|
-
children: [/* @__PURE__ */
|
|
147
|
+
children: [/* @__PURE__ */ b("p", {
|
|
149
148
|
className: "text-sm text-text-secondary",
|
|
150
|
-
children:
|
|
151
|
-
}), /* @__PURE__ */
|
|
149
|
+
children: w("members.list.title", "Members")
|
|
150
|
+
}), /* @__PURE__ */ b("p", {
|
|
152
151
|
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
153
|
-
children:
|
|
152
|
+
children: z.length
|
|
154
153
|
})]
|
|
155
|
-
}), /* @__PURE__ */
|
|
154
|
+
}), /* @__PURE__ */ x(y, {
|
|
156
155
|
treatment: "metric",
|
|
157
156
|
className: "p-4",
|
|
158
|
-
children: [/* @__PURE__ */
|
|
157
|
+
children: [/* @__PURE__ */ b("p", {
|
|
159
158
|
className: "text-sm text-text-secondary",
|
|
160
|
-
children:
|
|
161
|
-
}), /* @__PURE__ */
|
|
159
|
+
children: w("members.list.column.role", "Role")
|
|
160
|
+
}), /* @__PURE__ */ b("p", {
|
|
162
161
|
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
163
|
-
children: new Set(
|
|
162
|
+
children: new Set(z.map((e) => e.role)).size
|
|
164
163
|
})]
|
|
165
164
|
})]
|
|
166
165
|
}) : null,
|
|
167
|
-
/* @__PURE__ */
|
|
166
|
+
/* @__PURE__ */ x(y, {
|
|
168
167
|
treatment: "plain",
|
|
169
168
|
className: "border-border-seam p-4",
|
|
170
|
-
children: [/* @__PURE__ */
|
|
169
|
+
children: [/* @__PURE__ */ x("div", {
|
|
171
170
|
className: "flex flex-col gap-3 sm:flex-row sm:items-center",
|
|
172
|
-
children: [/* @__PURE__ */
|
|
173
|
-
value:
|
|
174
|
-
onChange:
|
|
175
|
-
placeholder:
|
|
176
|
-
label:
|
|
171
|
+
children: [/* @__PURE__ */ b(r, {
|
|
172
|
+
value: N,
|
|
173
|
+
onChange: le,
|
|
174
|
+
placeholder: w("members.list.searchPlaceholder", "Search by member ID or role..."),
|
|
175
|
+
label: w("members.list.searchLabel", "Search organization members"),
|
|
177
176
|
inputId: "organization-members-search",
|
|
178
177
|
className: "flex-1"
|
|
179
|
-
}), /* @__PURE__ */
|
|
178
|
+
}), /* @__PURE__ */ b("button", {
|
|
180
179
|
type: "button",
|
|
181
180
|
onClick: () => {
|
|
182
|
-
|
|
181
|
+
H();
|
|
183
182
|
},
|
|
184
183
|
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] px-4 py-2 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
185
|
-
"aria-label":
|
|
186
|
-
title:
|
|
187
|
-
children: /* @__PURE__ */
|
|
184
|
+
"aria-label": w("members.list.refresh", "Refresh members"),
|
|
185
|
+
title: w("members.list.refresh", "Refresh members"),
|
|
186
|
+
children: /* @__PURE__ */ b(g, {
|
|
188
187
|
size: 18,
|
|
189
188
|
"aria-hidden": "true"
|
|
190
189
|
})
|
|
191
190
|
})]
|
|
192
|
-
}), K.length > 0 ? /* @__PURE__ */
|
|
191
|
+
}), K.length > 0 ? /* @__PURE__ */ x("div", {
|
|
193
192
|
className: "mt-4 flex flex-col gap-3 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
194
|
-
children: [/* @__PURE__ */
|
|
193
|
+
children: [/* @__PURE__ */ x("div", {
|
|
195
194
|
className: "flex flex-wrap items-center gap-3",
|
|
196
|
-
children: [/* @__PURE__ */
|
|
195
|
+
children: [/* @__PURE__ */ x("label", {
|
|
197
196
|
className: "flex items-center gap-2 text-sm text-[var(--color-text-primary)]",
|
|
198
|
-
children: [/* @__PURE__ */
|
|
197
|
+
children: [/* @__PURE__ */ b(i, {
|
|
199
198
|
checked: J,
|
|
200
199
|
indeterminate: Y,
|
|
201
200
|
onChange: $,
|
|
202
|
-
ariaLabel:
|
|
203
|
-
}), /* @__PURE__ */
|
|
204
|
-
}),
|
|
201
|
+
ariaLabel: w("members.list.selectAll", "Select all members")
|
|
202
|
+
}), /* @__PURE__ */ b("span", { children: w("common.selectAllVisible", "Select all visible") })]
|
|
203
|
+
}), F.size > 0 ? /* @__PURE__ */ b("button", {
|
|
205
204
|
type: "button",
|
|
206
|
-
onClick: () =>
|
|
205
|
+
onClick: () => I(/* @__PURE__ */ new Set()),
|
|
207
206
|
className: "text-sm text-[var(--color-text-secondary)] transition-colors hover:text-[var(--color-text-primary)]",
|
|
208
|
-
children:
|
|
207
|
+
children: w("common.clearSelection", "Clear selection")
|
|
209
208
|
}) : null]
|
|
210
|
-
}), /* @__PURE__ */
|
|
209
|
+
}), /* @__PURE__ */ x("div", {
|
|
211
210
|
className: "flex flex-col gap-2 sm:flex-row sm:items-center",
|
|
212
|
-
children: [/* @__PURE__ */
|
|
211
|
+
children: [/* @__PURE__ */ x("span", {
|
|
213
212
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
214
213
|
children: [
|
|
215
|
-
|
|
214
|
+
F.size,
|
|
216
215
|
" ",
|
|
217
|
-
|
|
216
|
+
w("common.selected", "selected")
|
|
218
217
|
]
|
|
219
|
-
}),
|
|
218
|
+
}), O(c.MEMBER_REMOVE) && /* @__PURE__ */ x("button", {
|
|
220
219
|
type: "button",
|
|
221
220
|
onClick: fe,
|
|
222
|
-
disabled: q.length === 0 ||
|
|
221
|
+
disabled: q.length === 0 || W,
|
|
223
222
|
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
224
223
|
children: [
|
|
225
|
-
/* @__PURE__ */
|
|
224
|
+
/* @__PURE__ */ b(v, {
|
|
226
225
|
size: 16,
|
|
227
226
|
"aria-hidden": "true"
|
|
228
227
|
}),
|
|
229
|
-
/* @__PURE__ */
|
|
230
|
-
q.length > 0 ? /* @__PURE__ */
|
|
228
|
+
/* @__PURE__ */ b("span", { children: w("common.removeSelected", "Remove Selected") }),
|
|
229
|
+
q.length > 0 ? /* @__PURE__ */ x("span", { children: [
|
|
231
230
|
"(",
|
|
232
231
|
q.length,
|
|
233
232
|
")"
|
|
@@ -237,194 +236,194 @@ function C() {
|
|
|
237
236
|
})]
|
|
238
237
|
}) : null]
|
|
239
238
|
}),
|
|
240
|
-
K.length === 0 ? /* @__PURE__ */ y
|
|
241
|
-
treatment: "
|
|
239
|
+
K.length === 0 ? /* @__PURE__ */ b(y, {
|
|
240
|
+
treatment: "glass",
|
|
241
|
+
glow: !0,
|
|
242
242
|
className: "border-border-seam p-6",
|
|
243
|
-
children: /* @__PURE__ */
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
} : void 0
|
|
243
|
+
children: /* @__PURE__ */ b(ne, {
|
|
244
|
+
illustration: "empty-people",
|
|
245
|
+
title: w("members.list.emptyTitle", "No members found"),
|
|
246
|
+
description: w("members.list.emptyDescription", "Invite someone to this organization to grant them access and assign their role."),
|
|
247
|
+
action: j && O(c.MEMBER_INVITE) ? /* @__PURE__ */ b("button", {
|
|
248
|
+
type: "button",
|
|
249
|
+
onClick: () => E(`${D}/${M}/members/invite`),
|
|
250
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2 font-medium text-[var(--color-action-primary-text)] transition-all duration-200 hover:bg-[var(--color-action-primary-bgHover)]",
|
|
251
|
+
children: w("members.invite.button", "Invite Member")
|
|
252
|
+
}) : void 0
|
|
254
253
|
})
|
|
255
|
-
}) : /* @__PURE__ */
|
|
254
|
+
}) : /* @__PURE__ */ x(ae, { children: [/* @__PURE__ */ b("div", {
|
|
256
255
|
className: "grid gap-4 md:hidden",
|
|
257
|
-
children: K.map((e) => /* @__PURE__ */
|
|
256
|
+
children: K.map((e) => /* @__PURE__ */ x(y, {
|
|
258
257
|
treatment: "insight",
|
|
259
258
|
className: "border-border-seam p-4",
|
|
260
|
-
children: [/* @__PURE__ */
|
|
259
|
+
children: [/* @__PURE__ */ x("div", {
|
|
261
260
|
className: "flex items-start gap-3",
|
|
262
|
-
children: [/* @__PURE__ */
|
|
263
|
-
checked:
|
|
261
|
+
children: [/* @__PURE__ */ b(i, {
|
|
262
|
+
checked: F.has(e.id),
|
|
264
263
|
onChange: (t) => Q(e.id, t),
|
|
265
|
-
ariaLabel: `${
|
|
266
|
-
}), /* @__PURE__ */
|
|
264
|
+
ariaLabel: `${w("members.list.selectMember", "Select member")} ${e.userId}`
|
|
265
|
+
}), /* @__PURE__ */ x("div", {
|
|
267
266
|
className: "flex min-w-0 flex-1 gap-3",
|
|
268
|
-
children: [/* @__PURE__ */
|
|
267
|
+
children: [/* @__PURE__ */ b("div", {
|
|
269
268
|
className: "flex size-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
270
|
-
children: /* @__PURE__ */
|
|
269
|
+
children: /* @__PURE__ */ b(_, {
|
|
271
270
|
size: 18,
|
|
272
271
|
"aria-hidden": "true"
|
|
273
272
|
})
|
|
274
|
-
}), /* @__PURE__ */
|
|
273
|
+
}), /* @__PURE__ */ x("div", {
|
|
275
274
|
className: "min-w-0 flex-1 space-y-3",
|
|
276
|
-
children: [/* @__PURE__ */
|
|
277
|
-
/* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ x("div", { children: [
|
|
276
|
+
/* @__PURE__ */ x("div", {
|
|
278
277
|
className: "flex flex-wrap items-start gap-2",
|
|
279
|
-
children: [/* @__PURE__ */
|
|
278
|
+
children: [/* @__PURE__ */ b("h2", {
|
|
280
279
|
className: "break-all text-base font-semibold text-[var(--color-text-primary)]",
|
|
281
280
|
children: G[e.userId]?.displayName ?? `User ${e.userId.slice(0, 8)}…`
|
|
282
|
-
}), /* @__PURE__ */
|
|
281
|
+
}), /* @__PURE__ */ b(l, { role: e.role })]
|
|
283
282
|
}),
|
|
284
|
-
G[e.userId]?.email ? /* @__PURE__ */
|
|
283
|
+
G[e.userId]?.email ? /* @__PURE__ */ b("p", {
|
|
285
284
|
className: "mt-0.5 break-all text-xs text-[var(--color-text-secondary)]",
|
|
286
285
|
children: G[e.userId]?.email
|
|
287
286
|
}) : null,
|
|
288
|
-
/* @__PURE__ */
|
|
287
|
+
/* @__PURE__ */ x("details", {
|
|
289
288
|
className: "mt-1 text-xs text-[var(--color-text-muted)]",
|
|
290
289
|
children: [
|
|
291
|
-
/* @__PURE__ */
|
|
290
|
+
/* @__PURE__ */ b("summary", {
|
|
292
291
|
className: "cursor-pointer",
|
|
293
|
-
children:
|
|
292
|
+
children: w("members.list.showIds", "Show IDs")
|
|
294
293
|
}),
|
|
295
|
-
/* @__PURE__ */
|
|
294
|
+
/* @__PURE__ */ x("p", {
|
|
296
295
|
className: "mt-1 break-all font-mono",
|
|
297
296
|
children: [
|
|
298
|
-
|
|
297
|
+
w("members.detail.userId", "User ID"),
|
|
299
298
|
": ",
|
|
300
299
|
e.userId
|
|
301
300
|
]
|
|
302
301
|
}),
|
|
303
|
-
/* @__PURE__ */
|
|
302
|
+
/* @__PURE__ */ x("p", {
|
|
304
303
|
className: "mt-0.5 break-all font-mono",
|
|
305
304
|
children: [
|
|
306
|
-
|
|
305
|
+
w("members.list.memberId", "Member ID"),
|
|
307
306
|
": ",
|
|
308
307
|
e.id
|
|
309
308
|
]
|
|
310
309
|
})
|
|
311
310
|
]
|
|
312
311
|
})
|
|
313
|
-
] }), /* @__PURE__ */
|
|
312
|
+
] }), /* @__PURE__ */ x("dl", {
|
|
314
313
|
className: "grid grid-cols-1 gap-3 text-sm",
|
|
315
|
-
children: [/* @__PURE__ */
|
|
314
|
+
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
|
|
316
315
|
className: "text-[var(--color-text-secondary)]",
|
|
317
|
-
children:
|
|
318
|
-
}), /* @__PURE__ */
|
|
316
|
+
children: w("members.list.invitedBy", "Invited by")
|
|
317
|
+
}), /* @__PURE__ */ b("dd", {
|
|
319
318
|
className: "mt-1 break-all font-mono text-[var(--color-text-primary)]",
|
|
320
|
-
children: e.invitedBy ||
|
|
321
|
-
})] }), /* @__PURE__ */
|
|
319
|
+
children: e.invitedBy || w("common.notAvailable", "N/A")
|
|
320
|
+
})] }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
|
|
322
321
|
className: "text-[var(--color-text-secondary)]",
|
|
323
|
-
children:
|
|
324
|
-
}), /* @__PURE__ */
|
|
322
|
+
children: w("members.list.joined", "Joined")
|
|
323
|
+
}), /* @__PURE__ */ b("dd", {
|
|
325
324
|
className: "mt-1 text-[var(--color-text-primary)]",
|
|
326
|
-
children:
|
|
325
|
+
children: T(e.joinedAt)
|
|
327
326
|
})] })]
|
|
328
327
|
})]
|
|
329
328
|
})]
|
|
330
329
|
})]
|
|
331
|
-
}), /* @__PURE__ */
|
|
330
|
+
}), /* @__PURE__ */ x("div", {
|
|
332
331
|
className: "mt-4 flex flex-wrap gap-2 border-t border-[var(--color-border-default)] pt-4",
|
|
333
|
-
children: [/* @__PURE__ */
|
|
332
|
+
children: [/* @__PURE__ */ x("button", {
|
|
334
333
|
type: "button",
|
|
335
|
-
onClick: () =>
|
|
334
|
+
onClick: () => E(`${D}/${M}/members/${e.userId}`),
|
|
336
335
|
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
337
|
-
children: [/* @__PURE__ */
|
|
336
|
+
children: [/* @__PURE__ */ b(m, {
|
|
338
337
|
size: 16,
|
|
339
338
|
"aria-hidden": "true"
|
|
340
|
-
}),
|
|
341
|
-
}),
|
|
339
|
+
}), w("common.view", "View")]
|
|
340
|
+
}), O(c.MEMBER_REMOVE) && /* @__PURE__ */ x("button", {
|
|
342
341
|
type: "button",
|
|
343
342
|
onClick: () => Z(e.userId),
|
|
344
|
-
disabled:
|
|
343
|
+
disabled: W,
|
|
345
344
|
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-sm text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
346
|
-
children: [/* @__PURE__ */
|
|
345
|
+
children: [/* @__PURE__ */ b(v, {
|
|
347
346
|
size: 16,
|
|
348
347
|
"aria-hidden": "true"
|
|
349
|
-
}),
|
|
348
|
+
}), w("members.remove.confirm", "Remove")]
|
|
350
349
|
})]
|
|
351
350
|
})]
|
|
352
351
|
}, e.id))
|
|
353
|
-
}), /* @__PURE__ */ y
|
|
352
|
+
}), /* @__PURE__ */ b(y, {
|
|
354
353
|
treatment: "plain",
|
|
355
354
|
className: "hidden overflow-hidden border-border-seam p-0 md:block",
|
|
356
|
-
children: /* @__PURE__ */
|
|
355
|
+
children: /* @__PURE__ */ b("div", {
|
|
357
356
|
className: "overflow-x-auto",
|
|
358
|
-
children: /* @__PURE__ */
|
|
357
|
+
children: /* @__PURE__ */ x("table", {
|
|
359
358
|
className: "min-w-full",
|
|
360
|
-
children: [/* @__PURE__ */
|
|
359
|
+
children: [/* @__PURE__ */ b("thead", {
|
|
361
360
|
className: "bg-[var(--color-bg-subtle)]",
|
|
362
|
-
children: /* @__PURE__ */
|
|
363
|
-
/* @__PURE__ */
|
|
361
|
+
children: /* @__PURE__ */ x("tr", { children: [
|
|
362
|
+
/* @__PURE__ */ b("th", {
|
|
364
363
|
className: "w-12 px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
365
|
-
children: /* @__PURE__ */
|
|
364
|
+
children: /* @__PURE__ */ b(i, {
|
|
366
365
|
checked: J,
|
|
367
366
|
indeterminate: Y,
|
|
368
367
|
onChange: $,
|
|
369
|
-
ariaLabel:
|
|
368
|
+
ariaLabel: w("members.list.selectAll", "Select all members")
|
|
370
369
|
})
|
|
371
370
|
}),
|
|
372
|
-
/* @__PURE__ */
|
|
371
|
+
/* @__PURE__ */ b("th", {
|
|
373
372
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
374
|
-
children:
|
|
373
|
+
children: w("members.list.column.user", "User")
|
|
375
374
|
}),
|
|
376
|
-
/* @__PURE__ */
|
|
375
|
+
/* @__PURE__ */ b("th", {
|
|
377
376
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
378
|
-
children:
|
|
377
|
+
children: w("members.list.column.role", "Role")
|
|
379
378
|
}),
|
|
380
|
-
/* @__PURE__ */
|
|
379
|
+
/* @__PURE__ */ b("th", {
|
|
381
380
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
382
|
-
children:
|
|
381
|
+
children: w("members.list.invitedBy", "Invited by")
|
|
383
382
|
}),
|
|
384
|
-
/* @__PURE__ */
|
|
383
|
+
/* @__PURE__ */ b("th", {
|
|
385
384
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
386
|
-
children:
|
|
385
|
+
children: w("members.list.joined", "Joined")
|
|
387
386
|
}),
|
|
388
|
-
/* @__PURE__ */
|
|
387
|
+
/* @__PURE__ */ b("th", {
|
|
389
388
|
className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
390
|
-
children:
|
|
389
|
+
children: w("common.actions", "Actions")
|
|
391
390
|
})
|
|
392
391
|
] })
|
|
393
|
-
}), /* @__PURE__ */
|
|
392
|
+
}), /* @__PURE__ */ b("tbody", {
|
|
394
393
|
className: "divide-y divide-[var(--color-border-seam)]",
|
|
395
|
-
children: K.map((e) => /* @__PURE__ */
|
|
394
|
+
children: K.map((e) => /* @__PURE__ */ x("tr", {
|
|
396
395
|
className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
397
396
|
children: [
|
|
398
|
-
/* @__PURE__ */
|
|
397
|
+
/* @__PURE__ */ b("td", {
|
|
399
398
|
className: "px-6 py-4 align-top",
|
|
400
|
-
children: /* @__PURE__ */
|
|
401
|
-
checked:
|
|
399
|
+
children: /* @__PURE__ */ b(i, {
|
|
400
|
+
checked: F.has(e.id),
|
|
402
401
|
onChange: (t) => Q(e.id, t),
|
|
403
|
-
ariaLabel: `${
|
|
402
|
+
ariaLabel: `${w("members.list.selectMember", "Select member")} ${e.userId}`
|
|
404
403
|
})
|
|
405
404
|
}),
|
|
406
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ b("td", {
|
|
407
406
|
className: "px-6 py-4",
|
|
408
|
-
children: /* @__PURE__ */
|
|
407
|
+
children: /* @__PURE__ */ x("div", {
|
|
409
408
|
className: "flex items-start gap-3",
|
|
410
|
-
children: [/* @__PURE__ */
|
|
409
|
+
children: [/* @__PURE__ */ b("div", {
|
|
411
410
|
className: "flex size-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
412
|
-
children: /* @__PURE__ */
|
|
411
|
+
children: /* @__PURE__ */ b(_, {
|
|
413
412
|
size: 18,
|
|
414
413
|
"aria-hidden": "true"
|
|
415
414
|
})
|
|
416
|
-
}), /* @__PURE__ */
|
|
415
|
+
}), /* @__PURE__ */ x("div", {
|
|
417
416
|
className: "min-w-0",
|
|
418
|
-
children: [/* @__PURE__ */
|
|
419
|
-
profile: G[e.userId] ??
|
|
417
|
+
children: [/* @__PURE__ */ b(oe, {
|
|
418
|
+
profile: G[e.userId] ?? C({
|
|
420
419
|
actorId: e.userId,
|
|
421
420
|
actorType: "user"
|
|
422
421
|
}),
|
|
423
422
|
variant: "cell"
|
|
424
|
-
}), /* @__PURE__ */
|
|
423
|
+
}), /* @__PURE__ */ x("p", {
|
|
425
424
|
className: "break-all font-mono text-xs text-[var(--color-text-muted)]",
|
|
426
425
|
children: [
|
|
427
|
-
|
|
426
|
+
w("common.idLabel", "ID"),
|
|
428
427
|
": ",
|
|
429
428
|
e.id
|
|
430
429
|
]
|
|
@@ -432,40 +431,40 @@ function C() {
|
|
|
432
431
|
})]
|
|
433
432
|
})
|
|
434
433
|
}),
|
|
435
|
-
/* @__PURE__ */
|
|
434
|
+
/* @__PURE__ */ b("td", {
|
|
436
435
|
className: "px-6 py-4 align-top",
|
|
437
|
-
children: /* @__PURE__ */
|
|
436
|
+
children: /* @__PURE__ */ b(l, { role: e.role })
|
|
438
437
|
}),
|
|
439
|
-
/* @__PURE__ */
|
|
438
|
+
/* @__PURE__ */ b("td", {
|
|
440
439
|
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
441
|
-
children: e.invitedBy ||
|
|
440
|
+
children: e.invitedBy || w("common.notAvailable", "N/A")
|
|
442
441
|
}),
|
|
443
|
-
/* @__PURE__ */
|
|
442
|
+
/* @__PURE__ */ b("td", {
|
|
444
443
|
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
445
|
-
children:
|
|
444
|
+
children: T(e.joinedAt)
|
|
446
445
|
}),
|
|
447
|
-
/* @__PURE__ */
|
|
446
|
+
/* @__PURE__ */ b("td", {
|
|
448
447
|
className: "px-6 py-4 align-top",
|
|
449
|
-
children: /* @__PURE__ */
|
|
448
|
+
children: /* @__PURE__ */ x("div", {
|
|
450
449
|
className: "flex items-center justify-end gap-2",
|
|
451
|
-
children: [/* @__PURE__ */
|
|
450
|
+
children: [/* @__PURE__ */ b("button", {
|
|
452
451
|
type: "button",
|
|
453
|
-
onClick: () =>
|
|
452
|
+
onClick: () => E(`${D}/${M}/members/${e.userId}`),
|
|
454
453
|
className: "rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]",
|
|
455
|
-
"aria-label": `${
|
|
456
|
-
title: `${
|
|
457
|
-
children: /* @__PURE__ */
|
|
454
|
+
"aria-label": `${w("members.list.viewMember", "View member")} ${e.userId}`,
|
|
455
|
+
title: `${w("members.list.viewMember", "View member")} ${e.userId}`,
|
|
456
|
+
children: /* @__PURE__ */ b(m, {
|
|
458
457
|
size: 18,
|
|
459
458
|
"aria-hidden": "true"
|
|
460
459
|
})
|
|
461
|
-
}),
|
|
460
|
+
}), O(c.MEMBER_REMOVE) && /* @__PURE__ */ b("button", {
|
|
462
461
|
type: "button",
|
|
463
462
|
onClick: () => Z(e.userId),
|
|
464
|
-
disabled:
|
|
463
|
+
disabled: W,
|
|
465
464
|
className: "rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
466
|
-
"aria-label": `${
|
|
467
|
-
title: `${
|
|
468
|
-
children: /* @__PURE__ */
|
|
465
|
+
"aria-label": `${w("members.list.removeMember", "Remove member")} ${e.userId}`,
|
|
466
|
+
title: `${w("members.list.removeMember", "Remove member")} ${e.userId}`,
|
|
467
|
+
children: /* @__PURE__ */ b(v, {
|
|
469
468
|
size: 18,
|
|
470
469
|
"aria-hidden": "true"
|
|
471
470
|
})
|
|
@@ -479,25 +478,25 @@ function C() {
|
|
|
479
478
|
})
|
|
480
479
|
})] })
|
|
481
480
|
]
|
|
482
|
-
}),
|
|
483
|
-
}) : /* @__PURE__ */
|
|
481
|
+
}), R]
|
|
482
|
+
}) : /* @__PURE__ */ b("div", {
|
|
484
483
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
485
|
-
children: /* @__PURE__ */
|
|
484
|
+
children: /* @__PURE__ */ b("div", {
|
|
486
485
|
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
487
|
-
children:
|
|
486
|
+
children: w("members.list.noPermission", "You don't have permission to view members.")
|
|
488
487
|
})
|
|
489
|
-
}) : /* @__PURE__ */
|
|
488
|
+
}) : /* @__PURE__ */ b("div", {
|
|
490
489
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
491
|
-
children: /* @__PURE__ */
|
|
492
|
-
message:
|
|
490
|
+
children: /* @__PURE__ */ b(o, {
|
|
491
|
+
message: w("members.list.missingOrg", "Organization ID is required to view members"),
|
|
493
492
|
action: {
|
|
494
|
-
label:
|
|
495
|
-
onClick: () =>
|
|
493
|
+
label: w("members.list.goToOrganizations", "Go to Organizations"),
|
|
494
|
+
onClick: () => E(D)
|
|
496
495
|
}
|
|
497
496
|
})
|
|
498
497
|
});
|
|
499
498
|
}
|
|
500
499
|
//#endregion
|
|
501
|
-
export {
|
|
500
|
+
export { w as MembersListPage };
|
|
502
501
|
|
|
503
502
|
//# sourceMappingURL=MembersListPage.js.map
|