@stapel/workspaces-react 0.16.0 → 0.19.0
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/CHANGELOG.md +194 -0
- package/README.md +39 -8
- package/dist/api/generated/schema.d.ts +187 -60
- package/dist/api/generated/schema.d.ts.map +1 -1
- package/dist/default/ActiveWorkspace.d.ts +43 -0
- package/dist/default/ActiveWorkspace.d.ts.map +1 -0
- package/dist/default/ActiveWorkspace.js +33 -0
- package/dist/default/ActiveWorkspace.js.map +1 -0
- package/dist/default/AuditTrailPane.d.ts +12 -0
- package/dist/default/AuditTrailPane.d.ts.map +1 -0
- package/dist/default/AuditTrailPane.js +154 -0
- package/dist/default/AuditTrailPane.js.map +1 -0
- package/dist/default/InvitationsPane.d.ts +19 -0
- package/dist/default/InvitationsPane.d.ts.map +1 -0
- package/dist/default/InvitationsPane.js +217 -0
- package/dist/default/InvitationsPane.js.map +1 -0
- package/dist/default/InviteAcceptPage.d.ts +7 -0
- package/dist/default/InviteAcceptPage.d.ts.map +1 -1
- package/dist/default/InviteAcceptPage.js +74 -38
- package/dist/default/InviteAcceptPage.js.map +1 -1
- package/dist/default/MembersManager.d.ts +12 -4
- package/dist/default/MembersManager.d.ts.map +1 -1
- package/dist/default/MembersManager.js +320 -84
- package/dist/default/MembersManager.js.map +1 -1
- package/dist/default/RoleSelectField.d.ts +64 -0
- package/dist/default/RoleSelectField.d.ts.map +1 -0
- package/dist/default/RoleSelectField.js +78 -0
- package/dist/default/RoleSelectField.js.map +1 -0
- package/dist/default/WorkspaceSettings.d.ts +7 -1
- package/dist/default/WorkspaceSettings.d.ts.map +1 -1
- package/dist/default/WorkspaceSettings.js +203 -45
- package/dist/default/WorkspaceSettings.js.map +1 -1
- package/dist/default/WorkspacesPage.d.ts +13 -0
- package/dist/default/WorkspacesPage.d.ts.map +1 -0
- package/dist/default/WorkspacesPage.js +108 -0
- package/dist/default/WorkspacesPage.js.map +1 -0
- package/dist/default/index.d.ts +28 -7
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +24 -7
- package/dist/default/index.js.map +1 -1
- package/dist/default/parts.d.ts +104 -0
- package/dist/default/parts.d.ts.map +1 -0
- package/dist/default/parts.js +140 -0
- package/dist/default/parts.js.map +1 -0
- package/dist/headless/Members.d.ts +59 -14
- package/dist/headless/Members.d.ts.map +1 -1
- package/dist/headless/Members.js +35 -10
- package/dist/headless/Members.js.map +1 -1
- package/dist/headless/RoleSelect.d.ts +9 -3
- package/dist/headless/RoleSelect.d.ts.map +1 -1
- package/dist/headless/RoleSelect.js +3 -2
- package/dist/headless/RoleSelect.js.map +1 -1
- package/dist/i18n/es.d.ts +11 -12
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +267 -14
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.es.gen.js +5 -0
- package/dist/i18n/generated/errors.es.gen.js.map +1 -1
- package/dist/i18n/generated/errors.gen.d.ts +30 -0
- package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.gen.js +15 -0
- package/dist/i18n/generated/errors.gen.js.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.js +5 -0
- package/dist/i18n/generated/errors.ru.gen.js.map +1 -1
- package/dist/i18n/keys.d.ts +209 -1
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +410 -4
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts +7 -2
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +209 -4
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/model/format.d.ts +56 -0
- package/dist/model/format.d.ts.map +1 -0
- package/dist/model/format.js +125 -0
- package/dist/model/format.js.map +1 -0
- package/dist/model/mandate.d.ts +23 -1
- package/dist/model/mandate.d.ts.map +1 -1
- package/dist/model/mandate.js +24 -0
- package/dist/model/mandate.js.map +1 -1
- package/dist/model/selection.d.ts +15 -0
- package/dist/model/selection.d.ts.map +1 -1
- package/dist/model/selection.js +18 -1
- package/dist/model/selection.js.map +1 -1
- package/dist/nav/manifest.d.ts +45 -0
- package/dist/nav/manifest.d.ts.map +1 -0
- package/dist/nav/manifest.js +77 -0
- package/dist/nav/manifest.js.map +1 -0
- package/llms.txt +11 -10
- package/manifest.json +282 -69
- package/package.json +18 -12
- package/src/analytics/generated/events.json +1 -1
- package/src/api/generated/schema.ts +187 -60
- package/src/default/ActiveWorkspace.tsx +97 -0
- package/src/default/AuditTrailPane.tsx +309 -0
- package/src/default/InvitationsPane.tsx +501 -0
- package/src/default/InviteAcceptPage.tsx +187 -90
- package/src/default/MembersManager.tsx +832 -222
- package/src/default/RoleSelectField.tsx +187 -0
- package/src/default/WorkspaceSettings.tsx +540 -125
- package/src/default/WorkspacesPage.tsx +387 -0
- package/src/default/index.ts +28 -7
- package/src/default/parts.tsx +308 -0
- package/src/headless/Members.tsx +84 -16
- package/src/headless/RoleSelect.tsx +12 -5
- package/src/i18n/es.ts +326 -14
- package/src/i18n/generated/errors.es.gen.ts +5 -0
- package/src/i18n/generated/errors.gen.ts +15 -0
- package/src/i18n/generated/errors.json +37 -0
- package/src/i18n/generated/errors.ru.gen.ts +5 -0
- package/src/i18n/keys.ts +462 -5
- package/src/i18n/ru.ts +259 -5
- package/src/index.ts +6 -1
- package/src/model/format.ts +158 -0
- package/src/model/mandate.ts +26 -1
- package/src/model/selection.tsx +19 -1
- package/src/nav/manifest.ts +120 -0
- package/dist/default/ErrorAlert.d.ts +0 -8
- package/dist/default/ErrorAlert.d.ts.map +0 -1
- package/dist/default/ErrorAlert.js +0 -30
- package/dist/default/ErrorAlert.js.map +0 -1
- package/src/default/ErrorAlert.tsx +0 -47
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* `<InvitationsPane/>` — the admin's "who has not joined yet" console
|
|
4
|
+
* (stapel-workspaces #109). Four endpoints that had four hooks and zero
|
|
5
|
+
* pixels: list, revoke, resend, rename.
|
|
6
|
+
*
|
|
7
|
+
* ## Why each control is gated the way it is
|
|
8
|
+
*
|
|
9
|
+
* The three writes are refused by the backend on the invitation's own state,
|
|
10
|
+
* not on the caller's role, so the state is what the screen gates on and the
|
|
11
|
+
* reason is the one the endpoint would give:
|
|
12
|
+
*
|
|
13
|
+
* - **Revoke** and **rename** need a `pending` row. A terminal invitation
|
|
14
|
+
* answers `error.400.invitation_already_used` / `_revoked` / `_declined` /
|
|
15
|
+
* `_expired`; offering the control and letting the person discover that is
|
|
16
|
+
* the "button that leads to a refusal" defect.
|
|
17
|
+
* - **Resend** additionally accepts an `expired` row on purpose — a dead TTL
|
|
18
|
+
* is the commonest reason to resend — and it is NOT an idempotent poke: it
|
|
19
|
+
* rotates the token, so every earlier link (including the one in the
|
|
20
|
+
* invitee's inbox) stops working. The confirm says that, because an admin
|
|
21
|
+
* who does not know it will send two links and wonder which one works.
|
|
22
|
+
*
|
|
23
|
+
* Nothing here shows the invite TOKEN: it is a bearer credential that only
|
|
24
|
+
* ever leaves the backend inside the invitation email, and the response shape
|
|
25
|
+
* deliberately does not carry it.
|
|
26
|
+
*/
|
|
27
|
+
import { useState } from "react";
|
|
28
|
+
import { Card, Flex, Input, Segmented, Typography, theme as antdTheme } from "antd";
|
|
29
|
+
import { actionAvailable, actionBlocked, loadStateFromQuery, mapLoad, useT, useTPlural, } from "@stapel/core";
|
|
30
|
+
import { EmptyState, ErrorAlert, GatedButton, LoadList, SkinConfirm, SkinDialog, SkinTheme, } from "@stapel/tokens-antd/skin";
|
|
31
|
+
import { spacing } from "@stapel/tokens";
|
|
32
|
+
import { useInvitations } from "../model/queries.js";
|
|
33
|
+
import { useRenameInvitation, useResendInvitation, useRevokeInvitation, } from "../model/mutations.js";
|
|
34
|
+
import { useWorkspaceFormat } from "../model/format.js";
|
|
35
|
+
import { WORKSPACES_I18N_KEYS } from "../i18n/keys.js";
|
|
36
|
+
import { AnchorPager, Muted, PersonLine, RowActions, StatusTag } from "./parts.js";
|
|
37
|
+
import { ActiveWorkspaceBoundary } from "./ActiveWorkspace.js";
|
|
38
|
+
import { RoleLabel } from "./RoleSelectField.js";
|
|
39
|
+
/** The status a row is in, as the backend derives it. */
|
|
40
|
+
const STATUS_KEY = {
|
|
41
|
+
pending: WORKSPACES_I18N_KEYS.invitationsStatusPending,
|
|
42
|
+
accepted: WORKSPACES_I18N_KEYS.invitationsStatusAccepted,
|
|
43
|
+
declined: WORKSPACES_I18N_KEYS.invitationsStatusDeclined,
|
|
44
|
+
revoked: WORKSPACES_I18N_KEYS.invitationsStatusRevoked,
|
|
45
|
+
expired: WORKSPACES_I18N_KEYS.invitationsStatusExpired,
|
|
46
|
+
};
|
|
47
|
+
const STATUS_TONE = {
|
|
48
|
+
pending: "info",
|
|
49
|
+
accepted: "success",
|
|
50
|
+
declined: "neutral",
|
|
51
|
+
revoked: "neutral",
|
|
52
|
+
expired: "warning",
|
|
53
|
+
};
|
|
54
|
+
const FIRST_PAGE = { anchor: undefined, direction: undefined, index: 1 };
|
|
55
|
+
export function InvitationsPane(props) {
|
|
56
|
+
return (_jsx(SkinTheme, { "data-testid": "invitations-pane", children: _jsx(ActiveWorkspaceBoundary, { workspaceId: props.workspaceId, testId: "invitations-pane-workspace", children: (workspaceId) => (_jsx(InvitationsBody, { workspaceId: workspaceId, canManage: props.canManage ?? true })) }) }));
|
|
57
|
+
}
|
|
58
|
+
function InvitationsBody(props) {
|
|
59
|
+
const t = useT();
|
|
60
|
+
const tPlural = useTPlural();
|
|
61
|
+
const canManage = props.canManage;
|
|
62
|
+
const [status, setStatus] = useState("pending");
|
|
63
|
+
const [search, setSearch] = useState("");
|
|
64
|
+
const [walk, setWalk] = useState(FIRST_PAGE);
|
|
65
|
+
const [revoking, setRevoking] = useState(null);
|
|
66
|
+
const [resending, setResending] = useState(null);
|
|
67
|
+
const [renaming, setRenaming] = useState(null);
|
|
68
|
+
const params = {
|
|
69
|
+
status,
|
|
70
|
+
...(walk.anchor !== undefined ? { anchor: walk.anchor } : {}),
|
|
71
|
+
...(walk.direction !== undefined ? { direction: walk.direction } : {}),
|
|
72
|
+
...(search.trim() !== "" ? { search: search.trim() } : {}),
|
|
73
|
+
};
|
|
74
|
+
const query = useInvitations(props.workspaceId, params);
|
|
75
|
+
const revokeMutation = useRevokeInvitation(props.workspaceId);
|
|
76
|
+
const resendMutation = useResendInvitation(props.workspaceId);
|
|
77
|
+
const renameMutation = useRenameInvitation(props.workspaceId);
|
|
78
|
+
const page = query.data ?? null;
|
|
79
|
+
/** A new filter or a new search is a new walk — an anchor from the old one
|
|
80
|
+
* points into a list that no longer exists. */
|
|
81
|
+
function restart(apply) {
|
|
82
|
+
apply();
|
|
83
|
+
setWalk(FIRST_PAGE);
|
|
84
|
+
}
|
|
85
|
+
return (_jsxs(Card, { children: [_jsxs(Flex, { vertical: true, gap: spacing["1"], children: [_jsx(Typography.Title, { level: 4, style: { marginTop: 0, marginBottom: 0 }, children: t(WORKSPACES_I18N_KEYS.invitationsTitle) }), _jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.invitationsSubtitle) }), page !== null && (_jsx(Muted, { testId: "invitations-count", children: tPlural(WORKSPACES_I18N_KEYS.invitationsCount, { count: page.count }) }))] }), _jsxs(Flex, { gap: spacing["3"], wrap: true, align: "center", style: { marginTop: spacing["4"] }, children: [_jsx(Segmented, { value: status, onChange: (next) => restart(() => setStatus(next)), "aria-label": t(WORKSPACES_I18N_KEYS.invitationsFilterLabel), "data-testid": "invitations-filter", options: [
|
|
86
|
+
{ value: "pending", label: t(WORKSPACES_I18N_KEYS.invitationsFilterPending) },
|
|
87
|
+
{
|
|
88
|
+
value: "never_accepted",
|
|
89
|
+
label: t(WORKSPACES_I18N_KEYS.invitationsFilterNeverAccepted),
|
|
90
|
+
},
|
|
91
|
+
{ value: "all", label: t(WORKSPACES_I18N_KEYS.invitationsFilterAll) },
|
|
92
|
+
] }), _jsx(Input, { value: search, onChange: (event) => restart(() => setSearch(event.target.value)), placeholder: t(WORKSPACES_I18N_KEYS.invitationsSearchPlaceholder), "aria-label": t(WORKSPACES_I18N_KEYS.invitationsSearchPlaceholder), allowClear: true, style: { flex: "1 1 12rem" }, "data-testid": "invitations-search" })] }), _jsx(ErrorAlert, { thrown: revokeMutation.error ?? resendMutation.error ?? renameMutation.error, style: { marginTop: spacing["3"] }, testId: "invitations-write-error" }), !canManage && (_jsx("div", { style: { marginTop: spacing["2"] }, children: _jsx(Muted, { testId: "invitations-read-only", children: t(WORKSPACES_I18N_KEYS.membersBlockedReadOnly) }) })), _jsx("div", { style: { marginTop: spacing["4"] }, children: _jsx(LoadList, { state: mapLoad(loadStateFromQuery(query), (loaded) => loaded.items), testId: "invitations-list", onRetry: () => {
|
|
93
|
+
void query.refetch();
|
|
94
|
+
}, empty: _jsx(EmptyState, { title: t(WORKSPACES_I18N_KEYS.invitationsEmpty), testId: "invitations-list-empty" }), children: (invitations) => (_jsx("div", { role: "list", "data-testid": "invitations-rows", children: invitations.map((invitation) => (_jsx(InvitationRow, { invitation: invitation, canManage: canManage, onRename: () => setRenaming(invitation), onResend: () => setResending(invitation), onRevoke: () => setRevoking(invitation) }, invitation.id))) })) }) }), page !== null && (_jsx(AnchorPager, { hasPrev: page.has_prev, hasNext: page.has_next, prevLabel: t(WORKSPACES_I18N_KEYS.pagerPrev), nextLabel: t(WORKSPACES_I18N_KEYS.pagerNext), position: t(WORKSPACES_I18N_KEYS.pagerPosition, { page: walk.index }), testId: "invitations-pager", onPrev: () => setWalk({
|
|
95
|
+
anchor: page.prev_anchor ?? undefined,
|
|
96
|
+
direction: "prev",
|
|
97
|
+
index: Math.max(1, walk.index - 1),
|
|
98
|
+
}), onNext: () => setWalk({
|
|
99
|
+
anchor: page.next_anchor ?? undefined,
|
|
100
|
+
direction: "next",
|
|
101
|
+
index: walk.index + 1,
|
|
102
|
+
}) })), _jsx(SkinConfirm, { open: revoking !== null, danger: true, title: t(WORKSPACES_I18N_KEYS.invitationsRevokeConfirm), body: t(WORKSPACES_I18N_KEYS.invitationsRevokeConfirmBody, {
|
|
103
|
+
email: revoking?.email ?? "",
|
|
104
|
+
}), confirmLabel: t(WORKSPACES_I18N_KEYS.invitationsRevoke), cancelLabel: t(WORKSPACES_I18N_KEYS.cancel), confirming: revokeMutation.isPending, onConfirm: () => {
|
|
105
|
+
if (revoking !== null)
|
|
106
|
+
revokeMutation.mutate(revoking.id);
|
|
107
|
+
setRevoking(null);
|
|
108
|
+
}, onCancel: () => setRevoking(null), "data-testid": "invitations-revoke-confirm" }), _jsx(SkinConfirm, { open: resending !== null, title: t(WORKSPACES_I18N_KEYS.invitationsResendConfirm), body: t(WORKSPACES_I18N_KEYS.invitationsResendConfirmBody, {
|
|
109
|
+
email: resending?.email ?? "",
|
|
110
|
+
}), confirmLabel: t(WORKSPACES_I18N_KEYS.invitationsResend), cancelLabel: t(WORKSPACES_I18N_KEYS.cancel), confirming: resendMutation.isPending, onConfirm: () => {
|
|
111
|
+
if (resending !== null)
|
|
112
|
+
resendMutation.mutate(resending.id);
|
|
113
|
+
setResending(null);
|
|
114
|
+
}, onCancel: () => setResending(null), "data-testid": "invitations-resend-confirm" }), _jsx(RenameInvitationDialog, { invitation: renaming, onClose: () => setRenaming(null), isRenaming: renameMutation.isPending, onRename: (displayName) => {
|
|
115
|
+
if (renaming !== null) {
|
|
116
|
+
renameMutation.mutate({ invitationId: renaming.id, displayName });
|
|
117
|
+
}
|
|
118
|
+
setRenaming(null);
|
|
119
|
+
} })] }));
|
|
120
|
+
}
|
|
121
|
+
/** Only a live invitation can be withdrawn or corrected. */
|
|
122
|
+
function pendingOnly(invitation) {
|
|
123
|
+
return invitation.status === "pending"
|
|
124
|
+
? actionAvailable()
|
|
125
|
+
: actionBlocked(WORKSPACES_I18N_KEYS.invitationsBlockedTerminal);
|
|
126
|
+
}
|
|
127
|
+
/** Resend also accepts an expired row — reviving a dead TTL is what it is
|
|
128
|
+
* mostly for — and refuses the three terminal states. */
|
|
129
|
+
function resendable(invitation) {
|
|
130
|
+
return invitation.status === "pending" || invitation.status === "expired"
|
|
131
|
+
? actionAvailable()
|
|
132
|
+
: actionBlocked(WORKSPACES_I18N_KEYS.invitationsBlockedResendTerminal);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The row's refusal as ONE sentence, or `null` when nothing on it is refused.
|
|
136
|
+
*
|
|
137
|
+
* Both gates above answer the same question — what became of this invitation —
|
|
138
|
+
* and the row's status tag has already named it. So a row states the
|
|
139
|
+
* consequence once, in the shape a person reads it ("nothing more can be done
|
|
140
|
+
* with it" / "only resending is left"), instead of repeating a four-way
|
|
141
|
+
* disjunction under every button.
|
|
142
|
+
*/
|
|
143
|
+
function rowReasonKey(invitation) {
|
|
144
|
+
const liveRefused = !pendingOnly(invitation).available;
|
|
145
|
+
const resendRefused = !resendable(invitation).available;
|
|
146
|
+
if (liveRefused && resendRefused) {
|
|
147
|
+
return WORKSPACES_I18N_KEYS.invitationsBlockedRowClosed;
|
|
148
|
+
}
|
|
149
|
+
if (liveRefused)
|
|
150
|
+
return WORKSPACES_I18N_KEYS.invitationsBlockedRowResendOnly;
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
function InvitationRow(props) {
|
|
154
|
+
const t = useT();
|
|
155
|
+
const format = useWorkspaceFormat();
|
|
156
|
+
const { token } = antdTheme.useToken();
|
|
157
|
+
const { invitation } = props;
|
|
158
|
+
const statusKey = STATUS_KEY[invitation.status];
|
|
159
|
+
const expires = format.relative(invitation.expires_at);
|
|
160
|
+
const lastSent = format.relative(invitation.last_sent_at);
|
|
161
|
+
const reasonKey = rowReasonKey(invitation);
|
|
162
|
+
return (_jsxs("div", { role: "listitem", "data-testid": `invitation-row-${invitation.id}`, style: {
|
|
163
|
+
display: "flex",
|
|
164
|
+
flexWrap: "wrap",
|
|
165
|
+
alignItems: "center",
|
|
166
|
+
justifyContent: "space-between",
|
|
167
|
+
gap: spacing["3"],
|
|
168
|
+
paddingTop: spacing["3"],
|
|
169
|
+
paddingBottom: spacing["3"],
|
|
170
|
+
borderBottom: `1px solid ${token.colorSplit}`,
|
|
171
|
+
}, children: [_jsx(PersonLine, { name: invitation.display_name ?? null, email: invitation.email, tags: _jsx(StatusTag, { tone: STATUS_TONE[invitation.status] ?? "neutral", testId: `invitation-status-${invitation.id}`, children: statusKey === undefined ? invitation.status : t(statusKey) }), caption: _jsxs(_Fragment, { children: [_jsx(RoleLabel, { role: invitation.role }), expires !== null && (_jsxs(_Fragment, { children: [" · ", t(WORKSPACES_I18N_KEYS.invitationsExpiresLabel), ": ", expires] })), " · ", lastSent === null
|
|
172
|
+
? t(WORKSPACES_I18N_KEYS.invitationsSentNever)
|
|
173
|
+
: `${t(WORKSPACES_I18N_KEYS.invitationsSentLabel)}: ${lastSent}`] }) }), props.canManage && (_jsx(RowActions, { testId: `invitation-blocked-${invitation.id}`, ...(reasonKey !== null ? { reason: t(reasonKey) } : {}), actions: [
|
|
174
|
+
{
|
|
175
|
+
key: "rename",
|
|
176
|
+
gate: pendingOnly(invitation),
|
|
177
|
+
label: t(WORKSPACES_I18N_KEYS.invitationsRename),
|
|
178
|
+
onClick: props.onRename,
|
|
179
|
+
testId: `invitation-rename-${invitation.id}`,
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
key: "resend",
|
|
183
|
+
gate: resendable(invitation),
|
|
184
|
+
label: t(WORKSPACES_I18N_KEYS.invitationsResend),
|
|
185
|
+
onClick: props.onResend,
|
|
186
|
+
testId: `invitation-resend-${invitation.id}`,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
key: "revoke",
|
|
190
|
+
gate: pendingOnly(invitation),
|
|
191
|
+
label: t(WORKSPACES_I18N_KEYS.invitationsRevoke),
|
|
192
|
+
onClick: props.onRevoke,
|
|
193
|
+
danger: true,
|
|
194
|
+
testId: `invitation-revoke-${invitation.id}`,
|
|
195
|
+
},
|
|
196
|
+
] }))] }));
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* The name correction one step before the member rename: the invitee has not
|
|
200
|
+
* accepted, so there is no profile to write and the hint lives on the
|
|
201
|
+
* invitation. `accept_invitation` copies it onto the membership.
|
|
202
|
+
*/
|
|
203
|
+
function RenameInvitationDialog(props) {
|
|
204
|
+
const t = useT();
|
|
205
|
+
const current = props.invitation?.display_name ?? "";
|
|
206
|
+
const [value, setValue] = useState(current);
|
|
207
|
+
const [editingId, setEditingId] = useState(null);
|
|
208
|
+
if (props.invitation !== null && editingId !== props.invitation.id) {
|
|
209
|
+
setEditingId(props.invitation.id);
|
|
210
|
+
setValue(props.invitation.display_name ?? "");
|
|
211
|
+
}
|
|
212
|
+
const gate = value.trim() === current.trim()
|
|
213
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.membersRenameBlockedUnchanged)
|
|
214
|
+
: actionAvailable();
|
|
215
|
+
return (_jsx(SkinDialog, { open: props.invitation !== null, onClose: props.onClose, title: t(WORKSPACES_I18N_KEYS.invitationsRenameDialogTitle), dismissLabel: t(WORKSPACES_I18N_KEYS.dialogClose), "data-testid": "invitations-rename-dialog", footer: _jsx(GatedButton, { gate: gate, type: "primary", loading: props.isRenaming, onClick: () => props.onRename(value.trim() === "" ? null : value.trim()), testId: "invitations-rename-submit", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", children: t(WORKSPACES_I18N_KEYS.membersRenameSubmit) }), children: _jsxs(Flex, { vertical: true, gap: spacing["2"], children: [_jsx(Typography.Text, { children: t(WORKSPACES_I18N_KEYS.membersRenameLabel) }), _jsx(Input, { value: value, onChange: (event) => setValue(event.target.value), placeholder: t(WORKSPACES_I18N_KEYS.membersRenamePlaceholder), "aria-label": t(WORKSPACES_I18N_KEYS.membersRenameLabel), "data-testid": "invitations-rename-input" })] }) }));
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=InvitationsPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvitationsPane.js","sourceRoot":"","sources":["../../src/default/InvitationsPane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,13 @@ export interface InviteAcceptPageProps {
|
|
|
21
21
|
}) => ReactNode;
|
|
22
22
|
/** Wrong-account CTA (sign out / switch). Omitted → CTA hidden. */
|
|
23
23
|
readonly onSwitchAccount?: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* Leave the invitation page — the door out of a terminal state (expired,
|
|
26
|
+
* revoked, already used), where there is nothing left to do here. The pair
|
|
27
|
+
* owns no router, so omitting it draws no button and the page states the
|
|
28
|
+
* next step in words instead of offering one that goes nowhere.
|
|
29
|
+
*/
|
|
30
|
+
readonly onExit?: () => void;
|
|
24
31
|
readonly onAccepted?: (member: Member) => void;
|
|
25
32
|
readonly onDeclined?: () => void;
|
|
26
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InviteAcceptPage.d.ts","sourceRoot":"","sources":["../../src/default/InviteAcceptPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InviteAcceptPage.d.ts","sourceRoot":"","sources":["../../src/default/InviteAcceptPage.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBrD,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;0EACsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE;QAChC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KACrC,KAAK,SAAS,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC;IACzE,mEAAmE;IACnE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CA+B3E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* `<InviteAcceptPage/>` — the default `/invite/{token}` route component
|
|
4
4
|
* (org-program §B4): every state of the `InviteAcceptFlow` headless journey
|
|
@@ -7,10 +7,13 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
7
7
|
* - `renderLoginPanel` — the sign-in surface for a registered invitee
|
|
8
8
|
* without a session (drop auth-react's `<AuthPanel/>` in; call
|
|
9
9
|
* `onLoggedIn(email)` — or simply let the `sessionEmail` prop update,
|
|
10
|
-
* the flow re-routes on it automatically).
|
|
10
|
+
* the flow re-routes on it automatically). Unfilled, it renders a
|
|
11
|
+
* `SlotPlaceholder` in dev rather than a hole: an accept page with no way
|
|
12
|
+
* to sign in looks finished, which is the one defect nobody reports.
|
|
11
13
|
* - `renderInitialSetup` — the basic-data step for a freshly created
|
|
12
14
|
* account (drop profiles-react's `InitialSetupPrompt`/`InitialSetupModal`
|
|
13
|
-
* in; call `onDone()`). Omitted → the step auto-skips
|
|
15
|
+
* in; call `onDone()`). Omitted → the step auto-skips, which is a
|
|
16
|
+
* deliberate journey decision, not an unfilled hole.
|
|
14
17
|
*
|
|
15
18
|
* THE GRANT SEAM (§B4): for a NEW user the flow mints a login grant and this
|
|
16
19
|
* page hands it to YOUR `onLoginGrant(grantToken)` — wire it to auth-react's
|
|
@@ -19,25 +22,35 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
19
22
|
* (`grantExchanged`); a rejection shows a retry. The pairs stay decoupled:
|
|
20
23
|
* this package never imports auth-react.
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
+
* ## One primary per screen
|
|
26
|
+
*
|
|
27
|
+
* The visual pass photographed five solid blue buttons on this page, with
|
|
28
|
+
* "Decline" — irreversible, and the one the workspace is told about —
|
|
29
|
+
* indistinguishable from "Accept". Every state here now has at most ONE
|
|
30
|
+
* primary: joining. Declining is a quiet danger link behind a confirm that
|
|
31
|
+
* says what it costs. Failures come from the substrate's `ErrorAlert`, so a
|
|
32
|
+
* 429 on the claim reads "you can request another one in 42 seconds" (the
|
|
33
|
+
* backend's keyed `error.429.invitation_grant_pending` with its `retry_after`)
|
|
34
|
+
* instead of a generic shrug.
|
|
25
35
|
*/
|
|
26
36
|
import { useEffect, useRef, useState } from "react";
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
37
|
+
import { Button, Card, Flex, Result, Skeleton, Typography } from "antd";
|
|
38
|
+
import { SlotPlaceholder, actionAvailable, actionBlocked, useDescribeFlowError, useT, } from "@stapel/core";
|
|
39
|
+
import { ErrorAlert, GatedButton, SkinConfirm, SkinTheme, } from "@stapel/tokens-antd/skin";
|
|
40
|
+
import { spacing } from "@stapel/tokens";
|
|
29
41
|
import { InviteAcceptFlow } from "../headless/InviteAcceptFlow.js";
|
|
30
42
|
import { WORKSPACES_I18N_KEYS } from "../i18n/keys.js";
|
|
43
|
+
import { useRoleLabel } from "./RoleSelectField.js";
|
|
31
44
|
export function InviteAcceptPage(props) {
|
|
32
|
-
return (_jsx(InviteAcceptFlow, { token: props.token, sessionEmail: props.sessionEmail ?? null, ...(props.onAccepted !== undefined ? { onAccepted: props.onAccepted } : {}), ...(props.onDeclined !== undefined ? { onDeclined: props.onDeclined } : {}), children: (bag) => (_jsx(PageBody, { bag: bag, sessionEmail: props.sessionEmail ?? null, ...(props.onLoginGrant !== undefined
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
return (_jsx(SkinTheme, { surface: "base", "data-testid": "invite-accept-root", children: _jsx(InviteAcceptFlow, { token: props.token, sessionEmail: props.sessionEmail ?? null, ...(props.onAccepted !== undefined ? { onAccepted: props.onAccepted } : {}), ...(props.onDeclined !== undefined ? { onDeclined: props.onDeclined } : {}), children: (bag) => (_jsx(PageBody, { bag: bag, sessionEmail: props.sessionEmail ?? null, ...(props.onLoginGrant !== undefined
|
|
46
|
+
? { onLoginGrant: props.onLoginGrant }
|
|
47
|
+
: {}), ...(props.renderLoginPanel !== undefined
|
|
48
|
+
? { renderLoginPanel: props.renderLoginPanel }
|
|
49
|
+
: {}), ...(props.renderInitialSetup !== undefined
|
|
50
|
+
? { renderInitialSetup: props.renderInitialSetup }
|
|
51
|
+
: {}), ...(props.onSwitchAccount !== undefined
|
|
52
|
+
? { onSwitchAccount: props.onSwitchAccount }
|
|
53
|
+
: {}), ...(props.onExit !== undefined ? { onExit: props.onExit } : {}) })) }) }));
|
|
41
54
|
}
|
|
42
55
|
const UNAVAILABLE_KEY = {
|
|
43
56
|
expired: WORKSPACES_I18N_KEYS.inviteUnavailableExpired,
|
|
@@ -47,9 +60,12 @@ const UNAVAILABLE_KEY = {
|
|
|
47
60
|
};
|
|
48
61
|
function InviteHeader(props) {
|
|
49
62
|
const t = useT();
|
|
50
|
-
|
|
63
|
+
const labelFor = useRoleLabel();
|
|
64
|
+
return (_jsxs(Flex, { vertical: true, gap: spacing["1"], children: [_jsx(Typography.Title, { level: 3, style: { margin: 0 }, children: t(WORKSPACES_I18N_KEYS.inviteAcceptTitle, {
|
|
51
65
|
workspace: props.preview.workspace_name,
|
|
52
|
-
}) }), _jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteRoleLine, {
|
|
66
|
+
}) }), _jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteRoleLine, {
|
|
67
|
+
role: labelFor(props.preview.role),
|
|
68
|
+
}) }), _jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteEmailLine, {
|
|
53
69
|
email: props.preview.email_masked,
|
|
54
70
|
}) })] }));
|
|
55
71
|
}
|
|
@@ -57,9 +73,10 @@ function InviteHeader(props) {
|
|
|
57
73
|
* grant-exchange effect below. */
|
|
58
74
|
function PageBody(props) {
|
|
59
75
|
const t = useT();
|
|
60
|
-
const
|
|
76
|
+
const describeError = useDescribeFlowError();
|
|
61
77
|
const { bag } = props;
|
|
62
78
|
const s = bag.state;
|
|
79
|
+
const [confirmingDecline, setConfirmingDecline] = useState(false);
|
|
63
80
|
// ── the grant seam: run the host's exchange when the grant is issued ──────
|
|
64
81
|
const { onLoginGrant, renderInitialSetup } = props;
|
|
65
82
|
const grantToken = s.step === "grantIssued" ? s.grantToken : null;
|
|
@@ -94,42 +111,61 @@ function PageBody(props) {
|
|
|
94
111
|
switch (s.step) {
|
|
95
112
|
case "idle":
|
|
96
113
|
case "loadingPreview":
|
|
97
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true,
|
|
114
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: spacing["3"], role: "status", "aria-busy": "true", children: [_jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteLoading) }), _jsx(Skeleton, { active: true, paragraph: { rows: 2 } })] }) }));
|
|
98
115
|
case "previewError":
|
|
99
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(
|
|
116
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(ErrorAlert, { error: describeError(s.error), testId: "invite-preview-error" }) }));
|
|
117
|
+
// A dead end, and drawn as one. It used to be antd's INFO result — a
|
|
118
|
+
// blue 88px "!" disc, the same pictogram a tip uses — with nothing to do
|
|
119
|
+
// next. The link cannot be revived from here, so the screen says what
|
|
120
|
+
// became of it, in the warning tone that means "this did not work", and
|
|
121
|
+
// names the one thing that does help: asking for another one.
|
|
100
122
|
case "unavailable":
|
|
101
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(Result, { status: "
|
|
102
|
-
WORKSPACES_I18N_KEYS.inviteUnavailableRevoked)
|
|
123
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(Result, { status: "warning", title: s.preview.workspace_name, subTitle: t(UNAVAILABLE_KEY[s.status] ??
|
|
124
|
+
WORKSPACES_I18N_KEYS.inviteUnavailableRevoked), extra: _jsxs(Flex, { vertical: true, gap: spacing["3"], align: "center", children: [_jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteUnavailableNextStep, {
|
|
125
|
+
workspace: s.preview.workspace_name,
|
|
126
|
+
}) }), props.onExit !== undefined && (_jsx(Button, { type: "primary", onClick: props.onExit, "data-analytics": "none", "data-analytics-reason": "navigation \u2014 the host owns the router", "data-testid": "invite-exit", children: t(WORKSPACES_I18N_KEYS.inviteExitCta) }))] }) }) }));
|
|
103
127
|
case "wrongAccount":
|
|
104
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: "
|
|
128
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: spacing["4"], children: [_jsx(InviteHeader, { preview: s.preview }), _jsx(ErrorAlert, { message: t(WORKSPACES_I18N_KEYS.inviteWrongAccount), detail: t(WORKSPACES_I18N_KEYS.inviteWrongAccountHint, {
|
|
105
129
|
email: props.sessionEmail ?? "",
|
|
106
130
|
invited: s.preview.email_masked,
|
|
107
|
-
})
|
|
131
|
+
}), testId: "invite-wrong-account", ...(props.onSwitchAccount !== undefined
|
|
132
|
+
? {
|
|
133
|
+
action: (_jsx(Button, { onClick: props.onSwitchAccount, "data-analytics": "flow", "data-testid": "invite-switch-account", children: t(WORKSPACES_I18N_KEYS.inviteSwitchAccountCta) })),
|
|
134
|
+
}
|
|
135
|
+
: {}) })] }) }));
|
|
108
136
|
case "loginRequired":
|
|
109
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: "
|
|
137
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: spacing["4"], children: [_jsx(InviteHeader, { preview: s.preview }), _jsx(Typography.Text, { strong: true, children: t(WORKSPACES_I18N_KEYS.inviteLoginTitle) }), props.renderLoginPanel !== undefined ? (props.renderLoginPanel({
|
|
110
138
|
onLoggedIn: (email) => bag.sessionEstablished(email),
|
|
111
|
-
})] }) }));
|
|
139
|
+
})) : (_jsx(SlotPlaceholder, { name: "renderLoginPanel", "data-testid": "invite-login-slot" }))] }) }));
|
|
112
140
|
case "newUser":
|
|
113
141
|
case "claiming":
|
|
114
142
|
case "claimError":
|
|
115
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: "
|
|
143
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: spacing["4"], children: [_jsx(InviteHeader, { preview: s.preview }), _jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteNewUserHint, {
|
|
116
144
|
email: s.preview.email_masked,
|
|
117
|
-
}) }), s.step === "claimError" && (_jsx(
|
|
145
|
+
}) }), s.step === "claimError" && (_jsx(ErrorAlert, { error: describeError(s.error), testId: "invite-claim-error" })), _jsx(Button, { type: "primary", loading: s.step === "claiming", onClick: () => bag.claim(), "data-analytics": "flow", "data-testid": "invite-create-account", children: t(s.step === "claiming"
|
|
118
146
|
? WORKSPACES_I18N_KEYS.inviteClaiming
|
|
119
147
|
: WORKSPACES_I18N_KEYS.inviteCreateAccountCta) })] }) }));
|
|
120
148
|
case "grantIssued":
|
|
121
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(Flex, { vertical: true,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
149
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(Flex, { vertical: true, gap: spacing["3"], children: exchangeFailed ? (_jsx(ErrorAlert, { message: t(WORKSPACES_I18N_KEYS.inviteExchangeFailed), retryLabel: t(WORKSPACES_I18N_KEYS.inviteRetryCta), testId: "invite-exchange-error", onRetry: () => {
|
|
150
|
+
// Re-arm the effect for the same grant token.
|
|
151
|
+
exchangedRef.current = null;
|
|
152
|
+
setExchangeFailed(false);
|
|
153
|
+
} })) : (_jsxs(Flex, { vertical: true, gap: spacing["3"], role: "status", "aria-busy": "true", children: [_jsx(Typography.Text, { type: "secondary", children: t(WORKSPACES_I18N_KEYS.inviteExchanging) }), _jsx(Skeleton, { active: true, paragraph: { rows: 1 } })] })) }) }));
|
|
126
154
|
case "basicData":
|
|
127
|
-
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: "
|
|
155
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: spacing["4"], children: [_jsx(Typography.Title, { level: 4, style: { margin: 0 }, children: t(WORKSPACES_I18N_KEYS.inviteBasicDataTitle) }), renderInitialSetup !== undefined ? (renderInitialSetup({ onDone: () => bag.completeBasicData() })) : (_jsx(Skeleton, { active: true, paragraph: { rows: 1 } }))] }) }));
|
|
128
156
|
case "acceptPrompt":
|
|
129
157
|
case "accepting":
|
|
130
158
|
case "declining":
|
|
131
|
-
case "acceptError":
|
|
132
|
-
|
|
159
|
+
case "acceptError": {
|
|
160
|
+
const busy = s.step === "accepting" || s.step === "declining";
|
|
161
|
+
const busyGate = busy
|
|
162
|
+
? actionBlocked(WORKSPACES_I18N_KEYS.inviteBlockedBusy)
|
|
163
|
+
: actionAvailable();
|
|
164
|
+
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsxs(Flex, { vertical: true, gap: spacing["4"], children: [_jsx(InviteHeader, { preview: s.preview }), s.step === "acceptError" && (_jsx(ErrorAlert, { error: describeError(s.error), testId: "invite-accept-error" })), _jsxs(Flex, { vertical: true, gap: spacing["2"], align: "flex-start", children: [_jsx(Button, { type: "primary", block: true, loading: s.step === "accepting", onClick: () => bag.accept(), "data-analytics": "flow", "data-testid": "invite-join", children: t(WORKSPACES_I18N_KEYS.inviteJoinCta) }), _jsx(GatedButton, { gate: busyGate, danger: true, type: "link", loading: s.step === "declining", onClick: () => setConfirmingDecline(true), testId: "invite-decline", "data-analytics": "none", "data-analytics-reason": "opens the decline confirm", children: t(WORKSPACES_I18N_KEYS.inviteDeclineCta) })] }), _jsx(SkinConfirm, { open: confirmingDecline, danger: true, title: t(WORKSPACES_I18N_KEYS.inviteDeclineConfirm), body: t(WORKSPACES_I18N_KEYS.inviteDeclineConfirmBody), confirmLabel: t(WORKSPACES_I18N_KEYS.inviteDeclineCta), cancelLabel: t(WORKSPACES_I18N_KEYS.cancel), confirming: s.step === "declining", onConfirm: () => {
|
|
165
|
+
bag.decline();
|
|
166
|
+
setConfirmingDecline(false);
|
|
167
|
+
}, onCancel: () => setConfirmingDecline(false), "data-testid": "invite-decline-confirm" })] }) }));
|
|
168
|
+
}
|
|
133
169
|
case "accepted":
|
|
134
170
|
return (_jsx(Card, { "data-testid": "invite-accept-page", children: _jsx(Result, { status: "success", title: t(WORKSPACES_I18N_KEYS.inviteAccepted, {
|
|
135
171
|
workspace: s.preview.workspace_name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InviteAcceptPage.js","sourceRoot":"","sources":["../../src/default/InviteAcceptPage.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InviteAcceptPage.js","sourceRoot":"","sources":["../../src/default/InviteAcceptPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
export interface MembersManagerProps {
|
|
3
|
-
workspaceId: string;
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The workspace whose roster this is. OPTIONAL: omitted (the way the nav
|
|
5
|
+
* contract mounts this screen — it routes, it does not hand over an ambient
|
|
6
|
+
* scope), the active workspace is read from the runtime selection
|
|
7
|
+
* (`WorkspaceSelection`), and a screen with none renders the designed
|
|
8
|
+
* "choose a workspace" state rather than a blank.
|
|
9
|
+
*/
|
|
10
|
+
workspaceId?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the caller may invite, change roles, rename and remove members.
|
|
13
|
+
* The host already knows the caller's own verdict in this workspace (e.g.
|
|
7
14
|
* `useCapabilities(workspaceId).can("members.invite")`, or the coarser
|
|
8
15
|
* `my_role`); this component doesn't re-derive it — pass `false` for a
|
|
9
|
-
* read-only roster
|
|
16
|
+
* read-only roster, which says so rather than silently dropping controls.
|
|
17
|
+
* Default `true`.
|
|
10
18
|
*/
|
|
11
19
|
canManage?: boolean;
|
|
12
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MembersManager.d.ts","sourceRoot":"","sources":["../../src/default/MembersManager.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MembersManager.d.ts","sourceRoot":"","sources":["../../src/default/MembersManager.tsx"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,OAAO,CAAC;AA8BrD,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAsCD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAavE"}
|