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