@burdenoff/microfe-devportal 2026.625.2 → 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/devportal/components/EmptyState.js +14 -8
- package/dist/devportal/components/EmptyState.js.map +1 -1
- package/dist/devportal/components/LoadingState.js.map +1 -1
- package/dist/devportal/components/PageLayout.js +39 -34
- package/dist/devportal/components/PageLayout.js.map +1 -1
- package/dist/devportal/components/StatCard.js +4 -3
- package/dist/devportal/components/StatCard.js.map +1 -1
- package/dist/devportal/components/StatusBadge.js +1 -1
- package/dist/devportal/components/StatusBadge.js.map +1 -1
- package/dist/devportal/pages/ApiKeysPage.js +1 -1
- package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
- package/dist/devportal/pages/AppLogsPage.js +85 -85
- package/dist/devportal/pages/AppLogsPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +7 -7
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/DashboardPage.js +157 -151
- package/dist/devportal/pages/DashboardPage.js.map +1 -1
- package/dist/devportal/pages/DelegationsPage.js +2 -2
- package/dist/devportal/pages/DelegationsPage.js.map +1 -1
- package/dist/devportal/pages/OAuthClientsPage.js +1 -1
- package/dist/devportal/pages/OAuthClientsPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationMembersPage.js +225 -225
- package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.js +25 -25
- package/dist/devportal/pages/OrganizationsPage.js.map +1 -1
- package/dist/devportal/pages/WebhooksPage.js +1 -1
- package/dist/devportal/pages/WebhooksPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { useDevportal as e } from "../providers/DevportalProvider.js";
|
|
2
2
|
import { EmptyState as t } from "../components/EmptyState.js";
|
|
3
3
|
import { useCancelInvitationMutation as n, useGetOrganizationInvitationsQuery as r, useGetOrganizationMembersQuery as ee, useGetOrganizationQuery as te, useInviteMemberMutation as ne, useReactivateMemberMutation as re, useRemoveMemberMutation as ie, useResendInvitationMutation as ae, useSuspendMemberMutation as oe, useTransferOwnershipMutation as se, useUpdateMemberRoleMutation as ce } from "../../generated/global-operations.js";
|
|
4
|
-
import { PageLayout as i, PageSection as
|
|
5
|
-
import { ORG_ROLE_LABELS as
|
|
6
|
-
import { StatusBadge as
|
|
7
|
-
import { SelectionCheckbox as
|
|
8
|
-
import { DataTable as
|
|
4
|
+
import { PageLayout as i, PageSection as a } from "../components/PageLayout.js";
|
|
5
|
+
import { ORG_ROLE_LABELS as o } from "../utils/constants.js";
|
|
6
|
+
import { StatusBadge as s } from "../components/StatusBadge.js";
|
|
7
|
+
import { SelectionCheckbox as c } from "../components/SelectionCheckbox.js";
|
|
8
|
+
import { DataTable as le } from "../components/DataTable.js";
|
|
9
9
|
import { InputField as ue, SelectField as de } from "../components/FormField.js";
|
|
10
10
|
import { ConfirmDialog as l } from "../components/ConfirmDialog.js";
|
|
11
11
|
import { PermissionGuard as fe } from "../components/PermissionGuard.js";
|
|
@@ -16,285 +16,285 @@ import "../hooks/index.js";
|
|
|
16
16
|
import f from "../../node_modules/date-fns/format.js";
|
|
17
17
|
import { useEffect as pe, useMemo as p, useState as m } from "react";
|
|
18
18
|
import { useI18n as me } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
19
|
-
import { AlertCircle as h, Loader2 as he, Mail as ge, Plus as _e, RefreshCw as ve, Shield as ye, UserMinus as be
|
|
20
|
-
import { useParams as
|
|
19
|
+
import { AlertCircle as h, Loader2 as he, Mail as ge, Plus as _e, RefreshCw as ve, Shield as ye, UserMinus as be } from "lucide-react";
|
|
20
|
+
import { useParams as xe } from "react-router-dom";
|
|
21
21
|
import { jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
22
22
|
//#region src/devportal/pages/OrganizationMembersPage.tsx
|
|
23
23
|
var v = () => {
|
|
24
|
-
let { orgId: v } =
|
|
25
|
-
let n =
|
|
24
|
+
let { orgId: v } = xe(), { currentUser: y } = e(), { allowed: Se } = d(u.ORG_INVITATION_CREATE), { allowed: b } = d(u.ORG_MEMBER_UPDATE), { allowed: x } = d(u.ORG_MEMBER_DELETE), { allowed: S } = d(u.ORG_MEMBER_ACTIVATE), { allowed: C } = d(u.ORG_MEMBER_DEACTIVATE), w = (e) => e.email ? e.email : y?.id === e.userId && y.email ? y.email : e.userId, { t: Ce } = me(), T = (e, t) => {
|
|
25
|
+
let n = Ce(e);
|
|
26
26
|
return n === e ? t : n;
|
|
27
|
-
}, [
|
|
27
|
+
}, [we, E] = m(!1), [D, Te] = m(""), [Ee, De] = m("DEVELOPER"), [Oe, ke] = m(""), [Ae, O] = m(null), [je, k] = m(null), [A, j] = m(/* @__PURE__ */ new Set()), [M, N] = m(/* @__PURE__ */ new Set()), [Me, P] = m(!1), [Ne, F] = m(!1), [I, L] = m(null), { data: Pe } = te({
|
|
28
28
|
variables: { id: v ?? "" },
|
|
29
29
|
skip: !v,
|
|
30
30
|
fetchPolicy: "cache-first"
|
|
31
31
|
});
|
|
32
32
|
pe(() => {
|
|
33
|
-
let e =
|
|
33
|
+
let e = Pe?.developerOrganization?.name;
|
|
34
34
|
if (!v || !e) return;
|
|
35
35
|
let t = window.__breadcrumbRegistry;
|
|
36
36
|
return t?.register(v, e), () => t?.unregister(v);
|
|
37
|
-
}, [v,
|
|
38
|
-
let { data:
|
|
37
|
+
}, [v, Pe?.developerOrganization?.name]);
|
|
38
|
+
let { data: R, loading: Fe, error: z } = ee({
|
|
39
39
|
variables: { organizationId: v },
|
|
40
40
|
skip: !v,
|
|
41
41
|
fetchPolicy: "cache-and-network"
|
|
42
|
-
}), { data:
|
|
42
|
+
}), { data: B, loading: Ie, error: V } = r({
|
|
43
43
|
variables: {
|
|
44
44
|
organizationId: v,
|
|
45
45
|
status: "PENDING"
|
|
46
46
|
},
|
|
47
47
|
skip: !v,
|
|
48
48
|
fetchPolicy: "cache-and-network"
|
|
49
|
-
}), [
|
|
49
|
+
}), [Le, { loading: Re }] = ne({ refetchQueries: ["GetOrganizationInvitations"] }), [H] = ie({ refetchQueries: ["GetOrganizationMembers"] }), [U] = oe({ refetchQueries: ["GetOrganizationMembers"] }), [W] = re({ refetchQueries: ["GetOrganizationMembers"] }), [ze] = ce({ refetchQueries: ["GetOrganizationMembers", "GetOrganization"] }), [Be] = se({ refetchQueries: ["GetOrganizationMembers", "GetOrganization"] }), [G] = n({ refetchQueries: ["GetOrganizationInvitations"] }), [Ve] = ae(), K = p(() => R?.developerOrgMembers?.edges?.map((e) => e.node) ?? [], [R?.developerOrgMembers?.edges]), q = p(() => B?.developerOrgInvitations?.edges?.map((e) => e.node) ?? [], [B?.developerOrgInvitations?.edges]), He = R?.developerOrgMembers?.totalCount ?? 0, Ue = B?.developerOrgInvitations?.totalCount ?? 0, J = p(() => K.filter((e) => A.has(e.id)), [K, A]), Y = p(() => q.filter((e) => M.has(e.id)), [q, M]), X = K.filter((e) => e.role !== "OWNER"), We = X.length > 0 && X.every((e) => A.has(e.id)), Ge = X.some((e) => A.has(e.id)) && !We, Ke = q.length > 0 && q.every((e) => M.has(e.id)), qe = q.some((e) => M.has(e.id)) && !Ke, Z = J.filter((e) => e.role !== "OWNER" && !e.isSuspended), Q = J.filter((e) => e.isSuspended), $ = J.filter((e) => e.role !== "OWNER"), Je = async () => {
|
|
50
50
|
if (!(!v || !D.trim())) {
|
|
51
|
-
|
|
51
|
+
O(null);
|
|
52
52
|
try {
|
|
53
|
-
await
|
|
53
|
+
await Le({ variables: {
|
|
54
54
|
organizationId: v,
|
|
55
55
|
input: {
|
|
56
56
|
email: D,
|
|
57
|
-
role:
|
|
58
|
-
message:
|
|
57
|
+
role: Ee,
|
|
58
|
+
message: Oe || void 0
|
|
59
59
|
}
|
|
60
|
-
} }), E(!1),
|
|
60
|
+
} }), E(!1), Te(""), De("DEVELOPER"), ke("");
|
|
61
61
|
} catch (e) {
|
|
62
|
-
|
|
62
|
+
O(e instanceof Error ? e.message : T("devportal.failedToSendInvitation", "Failed to send invitation"));
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
},
|
|
66
|
-
|
|
65
|
+
}, Ye = async (e) => {
|
|
66
|
+
O(null);
|
|
67
67
|
try {
|
|
68
|
-
await
|
|
68
|
+
await H({ variables: { id: e } });
|
|
69
69
|
} catch (e) {
|
|
70
|
-
|
|
70
|
+
O(e instanceof Error ? e.message : T("devportal.failedToRemoveMember", "Failed to remove member"));
|
|
71
71
|
}
|
|
72
|
-
},
|
|
73
|
-
|
|
72
|
+
}, Xe = async (e, t) => {
|
|
73
|
+
O(null);
|
|
74
74
|
try {
|
|
75
|
-
await
|
|
75
|
+
await U({ variables: {
|
|
76
76
|
id: e,
|
|
77
77
|
reason: t || void 0
|
|
78
78
|
} });
|
|
79
79
|
} catch (e) {
|
|
80
|
-
|
|
80
|
+
O(e instanceof Error ? e.message : T("devportal.failedToSuspendMember", "Failed to suspend member"));
|
|
81
81
|
}
|
|
82
|
-
},
|
|
83
|
-
|
|
82
|
+
}, Ze = async (e) => {
|
|
83
|
+
O(null);
|
|
84
84
|
try {
|
|
85
|
-
await
|
|
85
|
+
await W({ variables: { id: e } });
|
|
86
86
|
} catch (e) {
|
|
87
|
-
|
|
87
|
+
O(e instanceof Error ? e.message : T("devportal.failedToReactivateMember", "Failed to reactivate member"));
|
|
88
88
|
}
|
|
89
|
-
},
|
|
90
|
-
|
|
89
|
+
}, Qe = async (e, t) => {
|
|
90
|
+
O(null);
|
|
91
91
|
try {
|
|
92
|
-
await
|
|
92
|
+
await ze({ variables: {
|
|
93
93
|
id: e,
|
|
94
94
|
role: t,
|
|
95
95
|
permissions: void 0
|
|
96
|
-
} }),
|
|
96
|
+
} }), k(T("devportal.memberRoleUpdated", "Member role updated successfully"));
|
|
97
97
|
} catch (e) {
|
|
98
|
-
|
|
98
|
+
O(e instanceof Error ? e.message : T("devportal.failedToUpdateMemberRole", "Failed to update member role"));
|
|
99
99
|
}
|
|
100
|
-
},
|
|
101
|
-
let e =
|
|
100
|
+
}, $e = async () => {
|
|
101
|
+
let e = I;
|
|
102
102
|
if (!(!v || !e)) {
|
|
103
|
-
|
|
103
|
+
O(null);
|
|
104
104
|
try {
|
|
105
|
-
await
|
|
105
|
+
await Be({ variables: {
|
|
106
106
|
organizationId: v,
|
|
107
107
|
newOwnerId: e.userId
|
|
108
|
-
} }),
|
|
108
|
+
} }), L(null), k(T("devportal.organizationOwnershipTransferred", "Organization ownership transferred successfully"));
|
|
109
109
|
} catch (e) {
|
|
110
|
-
|
|
110
|
+
O(e instanceof Error ? e.message : T("devportal.failedToTransferOwnership", "Failed to transfer organization ownership"));
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
},
|
|
114
|
-
|
|
113
|
+
}, et = async (e) => {
|
|
114
|
+
O(null);
|
|
115
115
|
try {
|
|
116
|
-
await
|
|
116
|
+
await G({ variables: { id: e } });
|
|
117
117
|
} catch (e) {
|
|
118
|
-
|
|
118
|
+
O(e instanceof Error ? e.message : T("devportal.failedToCancelInvitation", "Failed to cancel invitation"));
|
|
119
119
|
}
|
|
120
|
-
},
|
|
121
|
-
|
|
120
|
+
}, tt = async (e) => {
|
|
121
|
+
O(null);
|
|
122
122
|
try {
|
|
123
|
-
await
|
|
123
|
+
await Ve({ variables: { id: e } });
|
|
124
124
|
} catch (e) {
|
|
125
|
-
|
|
125
|
+
O(e instanceof Error ? e.message : T("devportal.failedToResendInvitation", "Failed to resend invitation"));
|
|
126
126
|
}
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
},
|
|
130
|
-
|
|
127
|
+
}, nt = () => {
|
|
128
|
+
j(/* @__PURE__ */ new Set()), N(/* @__PURE__ */ new Set());
|
|
129
|
+
}, rt = (e, t) => {
|
|
130
|
+
j((n) => {
|
|
131
131
|
let r = new Set(n);
|
|
132
132
|
return t ? r.add(e) : r.delete(e), r;
|
|
133
133
|
});
|
|
134
|
-
},
|
|
135
|
-
|
|
134
|
+
}, it = (e) => {
|
|
135
|
+
j((t) => {
|
|
136
136
|
let n = new Set(t);
|
|
137
|
-
return
|
|
137
|
+
return X.forEach((t) => {
|
|
138
138
|
e ? n.add(t.id) : n.delete(t.id);
|
|
139
139
|
}), n;
|
|
140
140
|
});
|
|
141
|
-
},
|
|
142
|
-
|
|
141
|
+
}, at = (e, t) => {
|
|
142
|
+
N((n) => {
|
|
143
143
|
let r = new Set(n);
|
|
144
144
|
return t ? r.add(e) : r.delete(e), r;
|
|
145
145
|
});
|
|
146
146
|
};
|
|
147
|
-
return (
|
|
148
|
-
title:
|
|
149
|
-
description:
|
|
147
|
+
return (Fe || Ie) && !R && !B ? /* @__PURE__ */ g(i, {
|
|
148
|
+
title: T("devportal.teamMembers", "Team Members"),
|
|
149
|
+
description: T("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
|
|
150
150
|
backLink: `/organizations/${v}`,
|
|
151
|
-
backLabel:
|
|
151
|
+
backLabel: T("devportal.backToOrganization", "Back to Organization"),
|
|
152
152
|
children: /* @__PURE__ */ g("div", {
|
|
153
153
|
className: "flex items-center justify-center py-16",
|
|
154
154
|
children: /* @__PURE__ */ g(he, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
155
155
|
})
|
|
156
|
-
}) : (
|
|
157
|
-
title:
|
|
158
|
-
description:
|
|
156
|
+
}) : (z || V) && !R && !B ? /* @__PURE__ */ g(i, {
|
|
157
|
+
title: T("devportal.teamMembers", "Team Members"),
|
|
158
|
+
description: T("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
|
|
159
159
|
backLink: `/organizations/${v}`,
|
|
160
|
-
backLabel:
|
|
160
|
+
backLabel: T("devportal.backToOrganization", "Back to Organization"),
|
|
161
161
|
children: /* @__PURE__ */ g(t, {
|
|
162
162
|
icon: /* @__PURE__ */ g(h, {
|
|
163
163
|
size: 32,
|
|
164
164
|
className: "text-status-error-text"
|
|
165
165
|
}),
|
|
166
|
-
title:
|
|
167
|
-
description:
|
|
166
|
+
title: T("devportal.failedToLoadMembers", "Failed to load members"),
|
|
167
|
+
description: z?.message || V?.message || T("devportal.anErrorOccurredWhileLoadingTeamData", "An error occurred while loading team data")
|
|
168
168
|
})
|
|
169
169
|
}) : /* @__PURE__ */ g(fe, {
|
|
170
170
|
permission: u.ORG_MEMBER_READ,
|
|
171
171
|
children: /* @__PURE__ */ _(i, {
|
|
172
|
-
title:
|
|
173
|
-
description:
|
|
172
|
+
title: T("devportal.teamMembers", "Team Members"),
|
|
173
|
+
description: T("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
|
|
174
174
|
backLink: `/organizations/${v}`,
|
|
175
|
-
backLabel:
|
|
175
|
+
backLabel: T("devportal.backToOrganization", "Back to Organization"),
|
|
176
176
|
actions: /* @__PURE__ */ _("button", {
|
|
177
177
|
onClick: () => E(!0),
|
|
178
|
-
disabled: !
|
|
179
|
-
"aria-disabled": !
|
|
178
|
+
disabled: !Se,
|
|
179
|
+
"aria-disabled": !Se,
|
|
180
180
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
|
|
181
|
-
children: [/* @__PURE__ */ g(_e, { size: 16 }),
|
|
181
|
+
children: [/* @__PURE__ */ g(_e, { size: 16 }), T("devportal.inviteMember", "Invite Member")]
|
|
182
182
|
}),
|
|
183
183
|
children: [
|
|
184
|
-
|
|
184
|
+
Ae && /* @__PURE__ */ _("div", {
|
|
185
185
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
|
|
186
186
|
children: [
|
|
187
187
|
/* @__PURE__ */ g(h, {
|
|
188
188
|
size: 16,
|
|
189
189
|
className: "flex-shrink-0"
|
|
190
190
|
}),
|
|
191
|
-
|
|
191
|
+
Ae,
|
|
192
192
|
/* @__PURE__ */ g("button", {
|
|
193
|
-
onClick: () =>
|
|
193
|
+
onClick: () => O(null),
|
|
194
194
|
className: "ml-auto text-status-error-text hover:text-status-error-text",
|
|
195
|
-
children:
|
|
195
|
+
children: T("devportal.dismiss", "Dismiss")
|
|
196
196
|
})
|
|
197
197
|
]
|
|
198
198
|
}),
|
|
199
|
-
|
|
199
|
+
je && /* @__PURE__ */ _("div", {
|
|
200
200
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 flex items-center gap-2 text-sm text-status-success-text",
|
|
201
201
|
children: [
|
|
202
202
|
/* @__PURE__ */ g(h, {
|
|
203
203
|
size: 16,
|
|
204
204
|
className: "flex-shrink-0"
|
|
205
205
|
}),
|
|
206
|
-
|
|
206
|
+
je,
|
|
207
207
|
/* @__PURE__ */ g("button", {
|
|
208
|
-
onClick: () =>
|
|
208
|
+
onClick: () => k(null),
|
|
209
209
|
className: "ml-auto text-status-success-text hover:text-status-success-text",
|
|
210
|
-
children:
|
|
210
|
+
children: T("devportal.dismiss", "Dismiss")
|
|
211
211
|
})
|
|
212
212
|
]
|
|
213
213
|
}),
|
|
214
|
-
(
|
|
214
|
+
(A.size > 0 || M.size > 0) && /* @__PURE__ */ _("div", {
|
|
215
215
|
className: "flex flex-wrap items-center gap-3 rounded-card border border-border-seam bg-bg-surface p-4",
|
|
216
216
|
children: [/* @__PURE__ */ _("span", {
|
|
217
217
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
218
218
|
children: [
|
|
219
|
-
|
|
219
|
+
A.size + M.size,
|
|
220
220
|
" ",
|
|
221
|
-
|
|
221
|
+
T("devportal.selected", "selected")
|
|
222
222
|
]
|
|
223
223
|
}), /* @__PURE__ */ g("button", {
|
|
224
|
-
onClick:
|
|
224
|
+
onClick: nt,
|
|
225
225
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
226
|
-
children:
|
|
226
|
+
children: T("devportal.clearAllSelections", "Clear all selections")
|
|
227
227
|
})]
|
|
228
228
|
}),
|
|
229
|
-
/* @__PURE__ */ g(
|
|
230
|
-
title: `${
|
|
231
|
-
actions:
|
|
229
|
+
/* @__PURE__ */ g(a, {
|
|
230
|
+
title: `${T("devportal.members", "Members")} (${He})`,
|
|
231
|
+
actions: K.length > 0 ? /* @__PURE__ */ _("div", {
|
|
232
232
|
className: "flex flex-wrap items-center gap-2",
|
|
233
233
|
children: [
|
|
234
234
|
/* @__PURE__ */ _("button", {
|
|
235
235
|
onClick: async () => {
|
|
236
236
|
if (Z.length === 0) return;
|
|
237
|
-
|
|
238
|
-
let e = await Promise.allSettled(Z.map((e) =>
|
|
237
|
+
O(null);
|
|
238
|
+
let e = await Promise.allSettled(Z.map((e) => U({ variables: {
|
|
239
239
|
id: e.id,
|
|
240
240
|
reason: void 0
|
|
241
241
|
} }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
242
|
-
|
|
242
|
+
k(`${T("devportal.suspended", "Suspended")} ${t} ${t === 1 ? T("devportal.memberLower", "member") : T("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), j(/* @__PURE__ */ new Set());
|
|
243
243
|
},
|
|
244
|
-
disabled: Z.length === 0 || !
|
|
245
|
-
"aria-disabled": !
|
|
244
|
+
disabled: Z.length === 0 || !C,
|
|
245
|
+
"aria-disabled": !C,
|
|
246
246
|
className: "rounded-md border border-status-warning-bg px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
247
|
-
children: [
|
|
247
|
+
children: [T("devportal.suspendSelected", "Suspend Selected"), Z.length > 0 ? ` (${Z.length})` : ""]
|
|
248
248
|
}),
|
|
249
249
|
/* @__PURE__ */ _("button", {
|
|
250
250
|
onClick: async () => {
|
|
251
251
|
if (Q.length === 0) return;
|
|
252
|
-
|
|
253
|
-
let e = await Promise.allSettled(Q.map((e) =>
|
|
254
|
-
|
|
252
|
+
O(null);
|
|
253
|
+
let e = await Promise.allSettled(Q.map((e) => W({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
254
|
+
k(`${T("devportal.reactivated", "Reactivated")} ${t} ${t === 1 ? T("devportal.memberLower", "member") : T("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), j(/* @__PURE__ */ new Set());
|
|
255
255
|
},
|
|
256
|
-
disabled: Q.length === 0 || !
|
|
257
|
-
"aria-disabled": !
|
|
256
|
+
disabled: Q.length === 0 || !S,
|
|
257
|
+
"aria-disabled": !S,
|
|
258
258
|
className: "rounded-md border border-status-success-bg px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
259
|
-
children: [
|
|
259
|
+
children: [T("devportal.reactivateSelected", "Reactivate Selected"), Q.length > 0 ? ` (${Q.length})` : ""]
|
|
260
260
|
}),
|
|
261
261
|
/* @__PURE__ */ _("button", {
|
|
262
|
-
onClick: () =>
|
|
263
|
-
disabled: $.length === 0 || !
|
|
264
|
-
"aria-disabled": !
|
|
262
|
+
onClick: () => P(!0),
|
|
263
|
+
disabled: $.length === 0 || !x,
|
|
264
|
+
"aria-disabled": !x,
|
|
265
265
|
className: "rounded-md border border-status-error-bg px-3 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
266
|
-
children: [
|
|
266
|
+
children: [T("devportal.removeSelected", "Remove Selected"), $.length > 0 ? ` (${$.length})` : ""]
|
|
267
267
|
})
|
|
268
268
|
]
|
|
269
269
|
}) : null,
|
|
270
|
-
children:
|
|
271
|
-
data:
|
|
270
|
+
children: K.length > 0 ? /* @__PURE__ */ g(le, {
|
|
271
|
+
data: K,
|
|
272
272
|
keyField: "id",
|
|
273
273
|
columns: [
|
|
274
274
|
{
|
|
275
275
|
key: "select",
|
|
276
|
-
header: /* @__PURE__ */ g(
|
|
277
|
-
checked:
|
|
278
|
-
indeterminate:
|
|
279
|
-
onChange:
|
|
280
|
-
ariaLabel:
|
|
276
|
+
header: /* @__PURE__ */ g(c, {
|
|
277
|
+
checked: We,
|
|
278
|
+
indeterminate: Ge,
|
|
279
|
+
onChange: it,
|
|
280
|
+
ariaLabel: T("devportal.selectAllMembers", "Select all members")
|
|
281
281
|
}),
|
|
282
282
|
className: "w-12",
|
|
283
283
|
render: (e) => /* @__PURE__ */ g("div", {
|
|
284
284
|
onClick: (e) => e.stopPropagation(),
|
|
285
|
-
children: /* @__PURE__ */ g(
|
|
286
|
-
checked:
|
|
285
|
+
children: /* @__PURE__ */ g(c, {
|
|
286
|
+
checked: A.has(e.id),
|
|
287
287
|
disabled: e.role === "OWNER",
|
|
288
|
-
onChange: (t) =>
|
|
289
|
-
ariaLabel: `Select member ${
|
|
288
|
+
onChange: (t) => rt(e.id, t),
|
|
289
|
+
ariaLabel: `Select member ${w(e)}`
|
|
290
290
|
})
|
|
291
291
|
})
|
|
292
292
|
},
|
|
293
293
|
{
|
|
294
294
|
key: "email",
|
|
295
|
-
header:
|
|
295
|
+
header: T("devportal.memberColumn", "Member"),
|
|
296
296
|
render: (e) => {
|
|
297
|
-
let t =
|
|
297
|
+
let t = w(e);
|
|
298
298
|
return /* @__PURE__ */ _("div", {
|
|
299
299
|
className: "flex items-center gap-3",
|
|
300
300
|
children: [/* @__PURE__ */ g("div", {
|
|
@@ -306,7 +306,7 @@ var v = () => {
|
|
|
306
306
|
}), /* @__PURE__ */ _("p", {
|
|
307
307
|
className: "text-xs text-text-secondary",
|
|
308
308
|
children: [
|
|
309
|
-
|
|
309
|
+
T("devportal.joined", "Joined"),
|
|
310
310
|
" ",
|
|
311
311
|
f(new Date(e.joinedAt), "MMM d, yyyy")
|
|
312
312
|
]
|
|
@@ -316,17 +316,17 @@ var v = () => {
|
|
|
316
316
|
},
|
|
317
317
|
{
|
|
318
318
|
key: "role",
|
|
319
|
-
header:
|
|
319
|
+
header: T("devportal.roleColumn", "Role"),
|
|
320
320
|
render: (e) => /* @__PURE__ */ _("div", {
|
|
321
321
|
className: "flex items-center gap-2",
|
|
322
322
|
children: [/* @__PURE__ */ g(ye, {
|
|
323
323
|
size: 14,
|
|
324
324
|
className: "text-text-secondary"
|
|
325
|
-
}), e.role === "OWNER" ? /* @__PURE__ */ g("span", { children:
|
|
325
|
+
}), e.role === "OWNER" ? /* @__PURE__ */ g("span", { children: o[e.role] ?? e.role }) : /* @__PURE__ */ g("select", {
|
|
326
326
|
value: e.role,
|
|
327
|
-
onChange: (t) => void
|
|
327
|
+
onChange: (t) => void Qe(e.id, t.target.value),
|
|
328
328
|
className: "rounded-md border border-border-subtle bg-bg-surface px-2 py-1 text-xs text-text-primary",
|
|
329
|
-
children: Object.entries(
|
|
329
|
+
children: Object.entries(o).filter(([e]) => e !== "OWNER").map(([e, t]) => /* @__PURE__ */ g("option", {
|
|
330
330
|
value: e,
|
|
331
331
|
children: t
|
|
332
332
|
}, e))
|
|
@@ -335,14 +335,14 @@ var v = () => {
|
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
337
|
key: "status",
|
|
338
|
-
header:
|
|
339
|
-
render: (e) => e.isSuspended ? /* @__PURE__ */ g(
|
|
338
|
+
header: T("devportal.statusColumn", "Status"),
|
|
339
|
+
render: (e) => e.isSuspended ? /* @__PURE__ */ g(s, {
|
|
340
340
|
status: "SUSPENDED",
|
|
341
341
|
type: "app"
|
|
342
|
-
}) : e.isActive ? /* @__PURE__ */ g(
|
|
342
|
+
}) : e.isActive ? /* @__PURE__ */ g(s, {
|
|
343
343
|
status: "ACTIVE",
|
|
344
344
|
type: "app"
|
|
345
|
-
}) : /* @__PURE__ */ g(
|
|
345
|
+
}) : /* @__PURE__ */ g(s, {
|
|
346
346
|
status: "INACTIVE",
|
|
347
347
|
type: "app"
|
|
348
348
|
})
|
|
@@ -356,98 +356,98 @@ var v = () => {
|
|
|
356
356
|
children: [
|
|
357
357
|
e.isSuspended ? /* @__PURE__ */ g("button", {
|
|
358
358
|
className: "text-xs text-status-success-text hover:underline disabled:opacity-50",
|
|
359
|
-
disabled: !x,
|
|
360
|
-
"aria-disabled": !x,
|
|
361
|
-
title: w("devportal.reactivateMember", "Reactivate member"),
|
|
362
|
-
onClick: () => Qe(e.id),
|
|
363
|
-
children: w("devportal.reactivate", "Reactivate")
|
|
364
|
-
}) : /* @__PURE__ */ g("button", {
|
|
365
|
-
className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
|
|
366
359
|
disabled: !S,
|
|
367
360
|
"aria-disabled": !S,
|
|
368
|
-
title:
|
|
361
|
+
title: T("devportal.reactivateMember", "Reactivate member"),
|
|
369
362
|
onClick: () => Ze(e.id),
|
|
370
|
-
children:
|
|
363
|
+
children: T("devportal.reactivate", "Reactivate")
|
|
364
|
+
}) : /* @__PURE__ */ g("button", {
|
|
365
|
+
className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
|
|
366
|
+
disabled: !C,
|
|
367
|
+
"aria-disabled": !C,
|
|
368
|
+
title: T("devportal.suspendMember", "Suspend member"),
|
|
369
|
+
onClick: () => Xe(e.id),
|
|
370
|
+
children: T("devportal.suspend", "Suspend")
|
|
371
371
|
}),
|
|
372
372
|
/* @__PURE__ */ g("button", {
|
|
373
373
|
className: "text-xs text-status-error-text hover:underline disabled:opacity-50",
|
|
374
|
-
disabled: !
|
|
375
|
-
"aria-disabled": !
|
|
376
|
-
title:
|
|
377
|
-
onClick: () =>
|
|
378
|
-
children:
|
|
374
|
+
disabled: !x,
|
|
375
|
+
"aria-disabled": !x,
|
|
376
|
+
title: T("devportal.removeMember", "Remove member"),
|
|
377
|
+
onClick: () => Ye(e.id),
|
|
378
|
+
children: T("devportal.remove", "Remove")
|
|
379
379
|
}),
|
|
380
380
|
/* @__PURE__ */ g("button", {
|
|
381
381
|
className: "text-xs text-primary hover:underline disabled:opacity-50",
|
|
382
|
-
disabled: !
|
|
383
|
-
"aria-disabled": !
|
|
384
|
-
title:
|
|
385
|
-
onClick: () =>
|
|
386
|
-
children:
|
|
382
|
+
disabled: !b,
|
|
383
|
+
"aria-disabled": !b,
|
|
384
|
+
title: T("devportal.transferOwnership", "Transfer ownership"),
|
|
385
|
+
onClick: () => L(e),
|
|
386
|
+
children: T("devportal.makeOwner", "Make Owner")
|
|
387
387
|
})
|
|
388
388
|
]
|
|
389
389
|
})
|
|
390
390
|
}
|
|
391
391
|
]
|
|
392
392
|
}) : /* @__PURE__ */ g(t, {
|
|
393
|
-
|
|
394
|
-
title:
|
|
395
|
-
description:
|
|
393
|
+
illustration: "empty-people",
|
|
394
|
+
title: T("devportal.noMembers", "No members"),
|
|
395
|
+
description: T("devportal.inviteTeamMembersToCollaborate", "Invite team members to collaborate")
|
|
396
396
|
})
|
|
397
397
|
}),
|
|
398
|
-
|
|
399
|
-
title: `${
|
|
398
|
+
q.length > 0 && /* @__PURE__ */ g(a, {
|
|
399
|
+
title: `${T("devportal.pendingInvitations", "Pending Invitations")} (${Ue})`,
|
|
400
400
|
actions: /* @__PURE__ */ _("div", {
|
|
401
401
|
className: "flex flex-wrap items-center gap-2",
|
|
402
402
|
children: [/* @__PURE__ */ _("button", {
|
|
403
403
|
onClick: async () => {
|
|
404
|
-
if (
|
|
405
|
-
|
|
406
|
-
let e = await Promise.allSettled(
|
|
407
|
-
|
|
404
|
+
if (Y.length === 0) return;
|
|
405
|
+
O(null);
|
|
406
|
+
let e = await Promise.allSettled(Y.map((e) => Ve({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
407
|
+
k(`${T("devportal.resent", "Resent")} ${t} ${t === 1 ? T("devportal.invitationLower", "invitation") : T("devportal.invitationsLower", "invitations")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), N(/* @__PURE__ */ new Set());
|
|
408
408
|
},
|
|
409
|
-
disabled:
|
|
409
|
+
disabled: Y.length === 0,
|
|
410
410
|
className: "rounded-md border border-primary/30 px-3 py-2 text-sm font-medium text-primary hover:bg-action-primary-bg/5 disabled:cursor-not-allowed disabled:opacity-50",
|
|
411
|
-
children: [
|
|
411
|
+
children: [T("devportal.resendSelected", "Resend Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
|
|
412
412
|
}), /* @__PURE__ */ _("button", {
|
|
413
|
-
onClick: () =>
|
|
414
|
-
disabled:
|
|
413
|
+
onClick: () => F(!0),
|
|
414
|
+
disabled: Y.length === 0,
|
|
415
415
|
className: "rounded-md border border-status-error-bg px-3 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
416
|
-
children: [
|
|
416
|
+
children: [T("devportal.cancelSelected", "Cancel Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
|
|
417
417
|
})]
|
|
418
418
|
}),
|
|
419
|
-
children: /* @__PURE__ */ g(
|
|
420
|
-
data:
|
|
419
|
+
children: /* @__PURE__ */ g(le, {
|
|
420
|
+
data: q,
|
|
421
421
|
keyField: "id",
|
|
422
422
|
columns: [
|
|
423
423
|
{
|
|
424
424
|
key: "select",
|
|
425
|
-
header: /* @__PURE__ */ g(
|
|
426
|
-
checked:
|
|
427
|
-
indeterminate:
|
|
425
|
+
header: /* @__PURE__ */ g(c, {
|
|
426
|
+
checked: Ke,
|
|
427
|
+
indeterminate: qe,
|
|
428
428
|
onChange: (e) => {
|
|
429
|
-
|
|
429
|
+
N((t) => {
|
|
430
430
|
let n = new Set(t);
|
|
431
|
-
return
|
|
431
|
+
return q.forEach((t) => {
|
|
432
432
|
e ? n.add(t.id) : n.delete(t.id);
|
|
433
433
|
}), n;
|
|
434
434
|
});
|
|
435
435
|
},
|
|
436
|
-
ariaLabel:
|
|
436
|
+
ariaLabel: T("devportal.selectAllInvitations", "Select all invitations")
|
|
437
437
|
}),
|
|
438
438
|
className: "w-12",
|
|
439
439
|
render: (e) => /* @__PURE__ */ g("div", {
|
|
440
440
|
onClick: (e) => e.stopPropagation(),
|
|
441
|
-
children: /* @__PURE__ */ g(
|
|
442
|
-
checked:
|
|
443
|
-
onChange: (t) =>
|
|
441
|
+
children: /* @__PURE__ */ g(c, {
|
|
442
|
+
checked: M.has(e.id),
|
|
443
|
+
onChange: (t) => at(e.id, t),
|
|
444
444
|
ariaLabel: `Select invitation ${e.invitedEmail}`
|
|
445
445
|
})
|
|
446
446
|
})
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
449
|
key: "invitedEmail",
|
|
450
|
-
header:
|
|
450
|
+
header: T("devportal.emailColumn", "Email"),
|
|
451
451
|
render: (e) => /* @__PURE__ */ _("div", {
|
|
452
452
|
className: "flex items-center gap-2",
|
|
453
453
|
children: [/* @__PURE__ */ g(ge, {
|
|
@@ -458,20 +458,20 @@ var v = () => {
|
|
|
458
458
|
},
|
|
459
459
|
{
|
|
460
460
|
key: "role",
|
|
461
|
-
header:
|
|
462
|
-
render: (e) =>
|
|
461
|
+
header: T("devportal.invitedRoleColumn", "Invited Role"),
|
|
462
|
+
render: (e) => o[e.role] ?? e.role
|
|
463
463
|
},
|
|
464
464
|
{
|
|
465
465
|
key: "status",
|
|
466
|
-
header:
|
|
467
|
-
render: (e) => /* @__PURE__ */ g(
|
|
466
|
+
header: T("devportal.statusColumn", "Status"),
|
|
467
|
+
render: (e) => /* @__PURE__ */ g(s, {
|
|
468
468
|
status: e.status,
|
|
469
469
|
type: "invitation"
|
|
470
470
|
})
|
|
471
471
|
},
|
|
472
472
|
{
|
|
473
473
|
key: "expiresAt",
|
|
474
|
-
header:
|
|
474
|
+
header: T("devportal.expiresColumn", "Expires"),
|
|
475
475
|
render: (e) => f(new Date(e.expiresAt), "MMM d, yyyy")
|
|
476
476
|
},
|
|
477
477
|
{
|
|
@@ -482,13 +482,13 @@ var v = () => {
|
|
|
482
482
|
className: "flex gap-1",
|
|
483
483
|
children: [/* @__PURE__ */ g("button", {
|
|
484
484
|
className: "rounded p-1 hover:bg-bg-sunken",
|
|
485
|
-
title:
|
|
486
|
-
onClick: () =>
|
|
485
|
+
title: T("devportal.resend", "Resend"),
|
|
486
|
+
onClick: () => tt(e.id),
|
|
487
487
|
children: /* @__PURE__ */ g(ve, { size: 14 })
|
|
488
488
|
}), /* @__PURE__ */ g("button", {
|
|
489
489
|
className: "rounded p-1 hover:bg-bg-sunken text-status-error-text",
|
|
490
|
-
title:
|
|
491
|
-
onClick: () =>
|
|
490
|
+
title: T("devportal.cancel", "Cancel"),
|
|
491
|
+
onClick: () => et(e.id),
|
|
492
492
|
children: /* @__PURE__ */ g(be, { size: 14 })
|
|
493
493
|
})]
|
|
494
494
|
})
|
|
@@ -496,38 +496,38 @@ var v = () => {
|
|
|
496
496
|
]
|
|
497
497
|
})
|
|
498
498
|
}),
|
|
499
|
-
|
|
500
|
-
open:
|
|
499
|
+
we && /* @__PURE__ */ g(l, {
|
|
500
|
+
open: we,
|
|
501
501
|
onOpenChange: E,
|
|
502
|
-
onConfirm:
|
|
503
|
-
title:
|
|
504
|
-
confirmLabel:
|
|
502
|
+
onConfirm: Je,
|
|
503
|
+
title: T("devportal.inviteTeamMember", "Invite Team Member"),
|
|
504
|
+
confirmLabel: Re ? T("devportal.sendingDots", "Sending...") : T("devportal.sendInvitation", "Send Invitation"),
|
|
505
505
|
children: /* @__PURE__ */ _("div", {
|
|
506
506
|
className: "space-y-4",
|
|
507
507
|
children: [/* @__PURE__ */ g(ue, {
|
|
508
|
-
label:
|
|
508
|
+
label: T("devportal.emailAddress", "Email Address"),
|
|
509
509
|
type: "email",
|
|
510
510
|
value: D,
|
|
511
|
-
onChange: (e) =>
|
|
511
|
+
onChange: (e) => Te(e.target.value),
|
|
512
512
|
placeholder: "colleague@example.com",
|
|
513
|
-
hint:
|
|
513
|
+
hint: T("devportal.mustBeExistingVerifiedUser", "Must be an existing verified user"),
|
|
514
514
|
required: !0
|
|
515
515
|
}), /* @__PURE__ */ g(de, {
|
|
516
|
-
label:
|
|
517
|
-
value:
|
|
518
|
-
onChange: (e) =>
|
|
516
|
+
label: T("devportal.roleColumn", "Role"),
|
|
517
|
+
value: Ee,
|
|
518
|
+
onChange: (e) => De(e.target.value),
|
|
519
519
|
options: [
|
|
520
520
|
{
|
|
521
521
|
value: "ADMIN",
|
|
522
|
-
label:
|
|
522
|
+
label: T("devportal.adminFullAccess", "Admin - Full access")
|
|
523
523
|
},
|
|
524
524
|
{
|
|
525
525
|
value: "DEVELOPER",
|
|
526
|
-
label:
|
|
526
|
+
label: T("devportal.developerCreateAndManageApps", "Developer - Create and manage apps")
|
|
527
527
|
},
|
|
528
528
|
{
|
|
529
529
|
value: "VIEWER",
|
|
530
|
-
label:
|
|
530
|
+
label: T("devportal.viewerReadOnlyAccess", "Viewer - Read-only access")
|
|
531
531
|
}
|
|
532
532
|
],
|
|
533
533
|
required: !0
|
|
@@ -535,45 +535,45 @@ var v = () => {
|
|
|
535
535
|
})
|
|
536
536
|
}),
|
|
537
537
|
/* @__PURE__ */ g(l, {
|
|
538
|
-
open:
|
|
539
|
-
onOpenChange:
|
|
538
|
+
open: Me,
|
|
539
|
+
onOpenChange: P,
|
|
540
540
|
onConfirm: async () => {
|
|
541
541
|
if ($.length === 0) return;
|
|
542
|
-
|
|
543
|
-
let e = await Promise.allSettled($.map((e) =>
|
|
544
|
-
|
|
542
|
+
O(null);
|
|
543
|
+
let e = await Promise.allSettled($.map((e) => H({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
544
|
+
k(`${T("devportal.removed", "Removed")} ${t} ${t === 1 ? T("devportal.memberLower", "member") : T("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), P(!1), j(/* @__PURE__ */ new Set());
|
|
545
545
|
},
|
|
546
|
-
title:
|
|
547
|
-
description: `${
|
|
548
|
-
confirmLabel:
|
|
549
|
-
cancelLabel:
|
|
546
|
+
title: T("devportal.removeSelectedMembers", "Remove selected members"),
|
|
547
|
+
description: `${T("devportal.removeNSelectedMembers", "Remove")} ${$.length} ${T("devportal.selectedMembersFromOrg", "selected member(s) from this organization? This action cannot be undone.")}`,
|
|
548
|
+
confirmLabel: T("devportal.removeMembers", "Remove Members"),
|
|
549
|
+
cancelLabel: T("devportal.cancel", "Cancel"),
|
|
550
550
|
variant: "danger"
|
|
551
551
|
}),
|
|
552
552
|
/* @__PURE__ */ g(l, {
|
|
553
|
-
open:
|
|
554
|
-
onOpenChange:
|
|
553
|
+
open: Ne,
|
|
554
|
+
onOpenChange: F,
|
|
555
555
|
onConfirm: async () => {
|
|
556
|
-
if (
|
|
557
|
-
|
|
558
|
-
let e = await Promise.allSettled(
|
|
559
|
-
|
|
556
|
+
if (Y.length === 0) return;
|
|
557
|
+
O(null);
|
|
558
|
+
let e = await Promise.allSettled(Y.map((e) => G({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
559
|
+
k(`${T("devportal.cancelled", "Cancelled")} ${t} ${t === 1 ? T("devportal.invitationLower", "invitation") : T("devportal.invitationsLower", "invitations")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), F(!1), N(/* @__PURE__ */ new Set());
|
|
560
560
|
},
|
|
561
|
-
title:
|
|
562
|
-
description: `${
|
|
563
|
-
confirmLabel:
|
|
564
|
-
cancelLabel:
|
|
561
|
+
title: T("devportal.cancelSelectedInvitations", "Cancel selected invitations"),
|
|
562
|
+
description: `${T("devportal.cancelNPendingInvitations", "Cancel")} ${Y.length} ${T("devportal.pendingInvitationsQuestion", "pending invitation(s)?")}`,
|
|
563
|
+
confirmLabel: T("devportal.cancelInvitations", "Cancel Invitations"),
|
|
564
|
+
cancelLabel: T("devportal.keepInvitations", "Keep Invitations"),
|
|
565
565
|
variant: "danger"
|
|
566
566
|
}),
|
|
567
567
|
/* @__PURE__ */ g(l, {
|
|
568
|
-
open:
|
|
568
|
+
open: I !== null,
|
|
569
569
|
onOpenChange: (e) => {
|
|
570
|
-
e ||
|
|
570
|
+
e || L(null);
|
|
571
571
|
},
|
|
572
|
-
onConfirm:
|
|
573
|
-
title:
|
|
574
|
-
description:
|
|
575
|
-
confirmLabel:
|
|
576
|
-
cancelLabel:
|
|
572
|
+
onConfirm: $e,
|
|
573
|
+
title: T("devportal.transferOwnership", "Transfer ownership"),
|
|
574
|
+
description: I ? T("devportal.transferOwnershipConfirmation", `Transfer organization ownership to ${w(I)}?`) : void 0,
|
|
575
|
+
confirmLabel: T("devportal.makeOwner", "Make Owner"),
|
|
576
|
+
cancelLabel: T("devportal.cancel", "Cancel"),
|
|
577
577
|
variant: "warning"
|
|
578
578
|
})
|
|
579
579
|
]
|