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