@rapidmx/web-client 0.14.1 → 0.15.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/apps/admin/domains/[uid].tsx +3 -2
- package/apps/shared/appearance/AppearanceForm.tsx +9 -1
- package/apps/shared/calendar/bookingPlugin.ts +100 -0
- package/apps/shared/calendar/calendarLiveUpdates.ts +27 -0
- package/apps/shared/components/admin/layout/AdminShell.tsx +37 -5
- package/apps/shared/components/admin/settings/MailboxCreateForm.tsx +3 -1
- package/apps/shared/components/admin/settings/PluginsManager.tsx +1545 -1491
- package/apps/shared/components/calendar/AppointmentQuickForm.tsx +327 -0
- package/apps/shared/components/calendar/DescriptionEditor.tsx +274 -0
- package/apps/shared/components/calendar/EventDescriptionView.tsx +70 -0
- package/apps/shared/components/calendar/EventDetails.tsx +401 -0
- package/apps/shared/components/calendar/EventEditor.tsx +640 -0
- package/apps/shared/components/calendar/EventExpandedForm.tsx +210 -0
- package/apps/shared/components/calendar/EventFormParts.tsx +622 -0
- package/apps/shared/components/calendar/EventModal.tsx +126 -866
- package/apps/shared/components/calendar/EventQuickForm.tsx +116 -0
- package/apps/shared/components/calendar/EventShell.tsx +202 -0
- package/apps/shared/components/calendar/FindATime.tsx +379 -0
- package/apps/shared/components/calendar/LazyDescriptionEditor.tsx +70 -0
- package/apps/shared/components/calendar/MonthView.tsx +15 -3
- package/apps/shared/components/calendar/QuickCreateFaces.tsx +87 -0
- package/apps/shared/components/calendar/QuickCreateTabs.tsx +81 -0
- package/apps/shared/components/calendar/QuickFaceFrame.tsx +81 -0
- package/apps/shared/components/calendar/RecurrenceEditor.tsx +10 -5
- package/apps/shared/components/calendar/RequestChangeForm.tsx +271 -0
- package/apps/shared/components/calendar/SplitDayView.tsx +6 -5
- package/apps/shared/components/calendar/TaskQuickForm.tsx +289 -0
- package/apps/shared/components/calendar/TimeGridView.tsx +8 -6
- package/apps/shared/components/calendar/eventDialogFields.ts +86 -0
- package/apps/shared/components/calendar/eventForm.ts +108 -0
- package/apps/shared/components/calendar/eventFormat.ts +183 -0
- package/apps/shared/components/calendar/findTimeGrid.ts +90 -0
- package/apps/shared/components/calendar/swipeNavigation.ts +14 -0
- package/apps/shared/components/layout/UserMenu.tsx +80 -28
- package/apps/shared/components/mail/ConversationList.tsx +100 -48
- package/apps/shared/components/mail/ConversationThreadPane.tsx +490 -486
- package/apps/shared/components/mail/InviteCard.tsx +387 -0
- package/apps/shared/components/mail/MessageDetailPane.tsx +24 -2
- package/apps/shared/components/mail/SwipeRow.tsx +120 -0
- package/apps/shared/components/mail/compose/ComposeWindow.tsx +7 -3
- package/apps/shared/components/mail/invite/InviteRowChip.tsx +104 -0
- package/apps/shared/components/mail/invite/InviteRsvpPopover.tsx +271 -0
- package/apps/shared/components/mail/invite/InviteTimeline.tsx +200 -0
- package/apps/shared/components/mail/invite/ProposeTimeForm.tsx +109 -0
- package/apps/shared/components/mail/invite/inviteFormat.ts +110 -0
- package/apps/shared/components/mail/invite/inviteStore.ts +114 -0
- package/apps/shared/components/mail/layout/MailShell.tsx +522 -490
- package/apps/shared/components/settings/layout/SettingsShell.tsx +1 -0
- package/apps/shared/gestures/useEnterSlide.ts +54 -0
- package/apps/shared/gestures/useSwipe.ts +114 -0
- package/apps/shared/gestures/useSwipeSlide.ts +113 -0
- package/apps/shared/gestures/useWheelPaging.ts +107 -0
- package/apps/shared/mail/newMailNotifications.ts +171 -183
- package/apps/shared/mail/useNewMailNotifications.ts +178 -178
- package/apps/shared/notifications/preferences.ts +36 -0
- package/apps/shared/notifications/store.ts +560 -551
- package/apps/www/_routes.ts +1 -0
- package/apps/www/calendar/index.tsx +139 -37
- package/apps/www/index.tsx +273 -126
- package/apps/www/messages/[uid].tsx +31 -4
- package/apps/www/settings/profile/index.tsx +248 -0
- package/dist/apps/admin/domains/[uid].js +4 -2
- package/dist/apps/shared/appearance/AppearanceForm.js +9 -1
- package/dist/apps/shared/calendar/bookingPlugin.d.ts +50 -0
- package/dist/apps/shared/calendar/bookingPlugin.js +57 -0
- package/dist/apps/shared/calendar/calendarLiveUpdates.d.ts +11 -0
- package/dist/apps/shared/calendar/calendarLiveUpdates.js +23 -0
- package/dist/apps/shared/components/admin/layout/AdminShell.d.ts +1 -1
- package/dist/apps/shared/components/admin/layout/AdminShell.js +7 -3
- package/dist/apps/shared/components/admin/settings/MailboxCreateForm.js +3 -1
- package/dist/apps/shared/components/admin/settings/PluginsManager.js +40 -6
- package/dist/apps/shared/components/calendar/AppointmentQuickForm.d.ts +47 -0
- package/dist/apps/shared/components/calendar/AppointmentQuickForm.js +135 -0
- package/dist/apps/shared/components/calendar/DescriptionEditor.d.ts +26 -0
- package/dist/apps/shared/components/calendar/DescriptionEditor.js +192 -0
- package/dist/apps/shared/components/calendar/EventDescriptionView.d.ts +14 -0
- package/dist/apps/shared/components/calendar/EventDescriptionView.js +39 -0
- package/dist/apps/shared/components/calendar/EventDetails.d.ts +33 -0
- package/dist/apps/shared/components/calendar/EventDetails.js +137 -0
- package/dist/apps/shared/components/calendar/EventEditor.d.ts +59 -0
- package/dist/apps/shared/components/calendar/EventEditor.js +549 -0
- package/dist/apps/shared/components/calendar/EventExpandedForm.d.ts +14 -0
- package/dist/apps/shared/components/calendar/EventExpandedForm.js +44 -0
- package/dist/apps/shared/components/calendar/EventFormParts.d.ts +69 -0
- package/dist/apps/shared/components/calendar/EventFormParts.js +202 -0
- package/dist/apps/shared/components/calendar/EventModal.d.ts +26 -13
- package/dist/apps/shared/components/calendar/EventModal.js +57 -459
- package/dist/apps/shared/components/calendar/EventQuickForm.d.ts +18 -0
- package/dist/apps/shared/components/calendar/EventQuickForm.js +25 -0
- package/dist/apps/shared/components/calendar/EventShell.d.ts +64 -0
- package/dist/apps/shared/components/calendar/EventShell.js +134 -0
- package/dist/apps/shared/components/calendar/FindATime.d.ts +18 -0
- package/dist/apps/shared/components/calendar/FindATime.js +190 -0
- package/dist/apps/shared/components/calendar/LazyDescriptionEditor.d.ts +8 -0
- package/dist/apps/shared/components/calendar/LazyDescriptionEditor.js +44 -0
- package/dist/apps/shared/components/calendar/MonthView.d.ts +5 -1
- package/dist/apps/shared/components/calendar/MonthView.js +11 -5
- package/dist/apps/shared/components/calendar/QuickCreateFaces.d.ts +30 -0
- package/dist/apps/shared/components/calendar/QuickCreateFaces.js +44 -0
- package/dist/apps/shared/components/calendar/QuickCreateTabs.d.ts +24 -0
- package/dist/apps/shared/components/calendar/QuickCreateTabs.js +46 -0
- package/dist/apps/shared/components/calendar/QuickFaceFrame.d.ts +25 -0
- package/dist/apps/shared/components/calendar/QuickFaceFrame.js +19 -0
- package/dist/apps/shared/components/calendar/RecurrenceEditor.d.ts +4 -1
- package/dist/apps/shared/components/calendar/RecurrenceEditor.js +2 -2
- package/dist/apps/shared/components/calendar/RequestChangeForm.d.ts +36 -0
- package/dist/apps/shared/components/calendar/RequestChangeForm.js +138 -0
- package/dist/apps/shared/components/calendar/SplitDayView.d.ts +3 -2
- package/dist/apps/shared/components/calendar/SplitDayView.js +3 -2
- package/dist/apps/shared/components/calendar/TaskQuickForm.d.ts +40 -0
- package/dist/apps/shared/components/calendar/TaskQuickForm.js +101 -0
- package/dist/apps/shared/components/calendar/TimeGridView.d.ts +4 -2
- package/dist/apps/shared/components/calendar/TimeGridView.js +3 -2
- package/dist/apps/shared/components/calendar/eventDialogFields.d.ts +28 -0
- package/dist/apps/shared/components/calendar/eventDialogFields.js +59 -0
- package/dist/apps/shared/components/calendar/eventForm.d.ts +98 -0
- package/dist/apps/shared/components/calendar/eventForm.js +1 -0
- package/dist/apps/shared/components/calendar/eventFormat.d.ts +67 -0
- package/dist/apps/shared/components/calendar/eventFormat.js +163 -0
- package/dist/apps/shared/components/calendar/findTimeGrid.d.ts +30 -0
- package/dist/apps/shared/components/calendar/findTimeGrid.js +83 -0
- package/dist/apps/shared/components/calendar/swipeNavigation.d.ts +9 -0
- package/dist/apps/shared/components/calendar/swipeNavigation.js +8 -0
- package/dist/apps/shared/components/layout/UserMenu.d.ts +10 -8
- package/dist/apps/shared/components/layout/UserMenu.js +70 -23
- package/dist/apps/shared/components/mail/ConversationList.d.ts +12 -1
- package/dist/apps/shared/components/mail/ConversationList.js +21 -4
- package/dist/apps/shared/components/mail/ConversationThreadPane.d.ts +4 -1
- package/dist/apps/shared/components/mail/InviteCard.d.ts +20 -0
- package/dist/apps/shared/components/mail/InviteCard.js +150 -0
- package/dist/apps/shared/components/mail/MessageDetailPane.js +13 -2
- package/dist/apps/shared/components/mail/SwipeRow.d.ts +22 -0
- package/dist/apps/shared/components/mail/SwipeRow.js +71 -0
- package/dist/apps/shared/components/mail/compose/ComposeWindow.js +8 -3
- package/dist/apps/shared/components/mail/invite/InviteRowChip.d.ts +23 -0
- package/dist/apps/shared/components/mail/invite/InviteRowChip.js +46 -0
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.d.ts +20 -0
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.js +141 -0
- package/dist/apps/shared/components/mail/invite/InviteTimeline.d.ts +27 -0
- package/dist/apps/shared/components/mail/invite/InviteTimeline.js +120 -0
- package/dist/apps/shared/components/mail/invite/ProposeTimeForm.d.ts +17 -0
- package/dist/apps/shared/components/mail/invite/ProposeTimeForm.js +45 -0
- package/dist/apps/shared/components/mail/invite/inviteFormat.d.ts +28 -0
- package/dist/apps/shared/components/mail/invite/inviteFormat.js +94 -0
- package/dist/apps/shared/components/mail/invite/inviteStore.d.ts +28 -0
- package/dist/apps/shared/components/mail/invite/inviteStore.js +95 -0
- package/dist/apps/shared/components/mail/layout/MailShell.d.ts +5 -0
- package/dist/apps/shared/components/mail/layout/MailShell.js +14 -3
- package/dist/apps/shared/components/settings/layout/SettingsShell.js +1 -0
- package/dist/apps/shared/gestures/useEnterSlide.d.ts +14 -0
- package/dist/apps/shared/gestures/useEnterSlide.js +47 -0
- package/dist/apps/shared/gestures/useSwipe.d.ts +45 -0
- package/dist/apps/shared/gestures/useSwipe.js +90 -0
- package/dist/apps/shared/gestures/useSwipeSlide.d.ts +40 -0
- package/dist/apps/shared/gestures/useSwipeSlide.js +95 -0
- package/dist/apps/shared/gestures/useWheelPaging.d.ts +32 -0
- package/dist/apps/shared/gestures/useWheelPaging.js +85 -0
- package/dist/apps/shared/mail/newMailNotifications.d.ts +3 -8
- package/dist/apps/shared/mail/newMailNotifications.js +3 -12
- package/dist/apps/shared/mail/useNewMailNotifications.js +3 -2
- package/dist/apps/shared/notifications/preferences.d.ts +13 -0
- package/dist/apps/shared/notifications/preferences.js +36 -0
- package/dist/apps/shared/notifications/store.d.ts +1 -0
- package/dist/apps/shared/notifications/store.js +7 -23
- package/dist/apps/www/_routes.js +1 -0
- package/dist/apps/www/calendar/index.js +76 -6
- package/dist/apps/www/index.js +140 -39
- package/dist/apps/www/messages/[uid].js +13 -5
- package/dist/apps/www/settings/profile/index.d.ts +4 -0
- package/dist/apps/www/settings/profile/index.js +124 -0
- package/package.json +2 -2
|
@@ -11,6 +11,8 @@ import MailAddress from "./MailAddress.js";
|
|
|
11
11
|
import { EncryptedPreview, conversationLooksEncrypted } from "./reading/EncryptedPreview.js";
|
|
12
12
|
import { ConversationSummary, listConversationMessages } from "@rapidmx/react-shared/mail/conversationsApi.js";
|
|
13
13
|
import { ROW_FOCUS_CLASS, UnreadBar, UnreadLabel, dateClass, isUnread, rowClass, senderClass, subjectClass } from "./unreadStyle.js";
|
|
14
|
+
import SwipeRow from "./SwipeRow.js";
|
|
15
|
+
import InviteRowChip from "./invite/InviteRowChip.js";
|
|
14
16
|
|
|
15
17
|
export interface ConversationListProps {
|
|
16
18
|
conversations: ConversationSummary[];
|
|
@@ -28,6 +30,8 @@ export interface ConversationListProps {
|
|
|
28
30
|
* read, which this list would otherwise keep showing as unread until the thread is collapsed and
|
|
29
31
|
* expanded again. */
|
|
30
32
|
messageOverrides?: Record<string, Message>;
|
|
33
|
+
/** Called with one of a conversation's own messages carrying the answer the reader just gave to its meeting request (from that row's RSVP chip), so the caller can keep it. An answer given from the conversation's own (parent) row is kept by this list itself. */
|
|
34
|
+
onMeetingResponded?: (updated: Message) => void;
|
|
31
35
|
/** Turns each parent row into a checkbox row: select mode here ticks whole conversations, since a
|
|
32
36
|
* conversation is what this list's rows are. A child row stays a plain "open this message" button - a
|
|
33
37
|
* mixed conversation/message selection has no sensible bulk semantics (see `MailListToolbar`). */
|
|
@@ -35,6 +39,15 @@ export interface ConversationListProps {
|
|
|
35
39
|
/** The `conversationId`s currently ticked. */
|
|
36
40
|
selectedConversationIds?: Set<string>;
|
|
37
41
|
onToggleSelected?: (conversation: ConversationSummary) => void;
|
|
42
|
+
/**
|
|
43
|
+
* What swiping a parent row does on a phone: right to left archives the conversation (resolving whether it went through), left
|
|
44
|
+
* to right asks where to move it. Absent, or `enabled: false` (a desktop), rows don't follow a finger.
|
|
45
|
+
*/
|
|
46
|
+
swipe?: {
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
onArchive: (conversation: ConversationSummary) => Promise<boolean>;
|
|
49
|
+
onMove: (conversation: ConversationSummary) => void;
|
|
50
|
+
};
|
|
38
51
|
/**
|
|
39
52
|
* Whether a conversation's own messages read newest first, matching the order sense the rows themselves
|
|
40
53
|
* are in ("Newest on top"). `listConversationMessages()` always answers oldest first - the order a
|
|
@@ -67,15 +80,23 @@ export default function ConversationList({
|
|
|
67
80
|
selectedUid,
|
|
68
81
|
onOpenMessage,
|
|
69
82
|
messageOverrides,
|
|
83
|
+
onMeetingResponded,
|
|
70
84
|
selectMode,
|
|
71
85
|
selectedConversationIds,
|
|
72
86
|
onToggleSelected,
|
|
87
|
+
swipe,
|
|
73
88
|
newestFirst,
|
|
74
89
|
}: ConversationListProps) {
|
|
75
90
|
const [expanded, setExpanded] = useState<Set<string>>(new Set());
|
|
76
91
|
const [messagesById, setMessagesById] = useState<Record<string, Message[]>>({});
|
|
77
92
|
const [loadingIds, setLoadingIds] = useState<Set<string>>(new Set());
|
|
78
93
|
const [errorsById, setErrorsById] = useState<Record<string, string>>({});
|
|
94
|
+
// The answers given from a row's RSVP chip, by message uid: a row draws them at once, whichever row (the conversation's, or one of its messages) they were given from.
|
|
95
|
+
const [answers, setAnswers] = useState<Record<string, Message["meetingResponse"]>>({});
|
|
96
|
+
|
|
97
|
+
function answered(updated: Message) {
|
|
98
|
+
setAnswers((prev) => ({ ...prev, [updated.uid]: updated.meetingResponse }));
|
|
99
|
+
}
|
|
79
100
|
|
|
80
101
|
function toggle(conversation: ConversationSummary) {
|
|
81
102
|
const id = conversation.conversationId;
|
|
@@ -119,7 +140,8 @@ export default function ConversationList({
|
|
|
119
140
|
}
|
|
120
141
|
|
|
121
142
|
return (
|
|
122
|
-
|
|
143
|
+
// `overflow-x-clip`: the panels a swiped row drags along stand outside its edges (see `SwipeRow`).
|
|
144
|
+
<ul className={swipe?.enabled ? "overflow-x-clip" : undefined}>
|
|
123
145
|
{conversations.map((conversation) => {
|
|
124
146
|
const id = conversation.conversationId;
|
|
125
147
|
const isExpanded = expanded.has(id);
|
|
@@ -132,7 +154,11 @@ export default function ConversationList({
|
|
|
132
154
|
const ticked = selectedConversationIds?.has(id) ?? false;
|
|
133
155
|
return (
|
|
134
156
|
<li key={id}>
|
|
135
|
-
<
|
|
157
|
+
<SwipeRow
|
|
158
|
+
as="div"
|
|
159
|
+
enabled={!!swipe?.enabled && !selectMode}
|
|
160
|
+
onArchive={() => swipe!.onArchive(conversation)}
|
|
161
|
+
onMove={() => swipe!.onMove(conversation)}
|
|
136
162
|
data-message-uid={conversation.latestMessageUid}
|
|
137
163
|
data-unread={unread ? "true" : undefined}
|
|
138
164
|
className={rowClass({ unread, selected: conversation.latestMessageUid === selectedUid || ticked }, "flex items-stretch")}
|
|
@@ -163,53 +189,71 @@ export default function ConversationList({
|
|
|
163
189
|
<HiChevronRight size={16} aria-hidden="true" />
|
|
164
190
|
)}
|
|
165
191
|
</button>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
{
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
<span className="
|
|
192
|
+
{/* The open button and, for a meeting request, its RSVP chip: a button can't hold a button, so the chip is the button's sibling. */}
|
|
193
|
+
<div className="flex-1 min-w-0 flex flex-col">
|
|
194
|
+
<button
|
|
195
|
+
type="button"
|
|
196
|
+
data-row-open
|
|
197
|
+
onClick={() => onOpenMessage(conversation, conversation.latestMessageUid)}
|
|
198
|
+
className={["w-full text-left pr-4 py-3", ROW_FOCUS_CLASS].join(" ")}
|
|
199
|
+
>
|
|
200
|
+
<UnreadLabel unread={unread} />
|
|
201
|
+
<div className="flex items-center justify-between gap-2 text-sm">
|
|
202
|
+
{/* The first participant in full - name and address - and the rest as a count, with everyone's
|
|
203
|
+
address in its tooltip; the latest sender when the summary lists none. */}
|
|
204
|
+
<MailAddress
|
|
205
|
+
recipient={conversation.participants[0] ?? conversation.latestFrom}
|
|
206
|
+
className={["flex-1", senderClass(unread)].join(" ")}
|
|
207
|
+
/>
|
|
208
|
+
{conversation.participants.length > 1 && (
|
|
209
|
+
<span className="text-xs text-text-muted shrink-0 font-normal" title={participantList(conversation)}>
|
|
210
|
+
+{conversation.participants.length - 1}
|
|
211
|
+
<span className="sr-only"> more: {participantList(conversation)}</span>
|
|
212
|
+
</span>
|
|
213
|
+
)}
|
|
214
|
+
<span className={["text-xs shrink-0", dateClass(unread)].join(" ")}>
|
|
215
|
+
{new Date(conversation.latestDate).toLocaleDateString()}
|
|
184
216
|
</span>
|
|
185
|
-
|
|
186
|
-
<
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
{
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
217
|
+
</div>
|
|
218
|
+
<div className={["text-sm truncate", subjectClass(unread)].join(" ")}>{conversation.subject || "(no subject)"}</div>
|
|
219
|
+
<div className="text-xs text-text-muted truncate font-normal">
|
|
220
|
+
{/* An encrypted latest message has no preview (the server never had its plaintext): say so, with a lock, not nothing. */}
|
|
221
|
+
{conversationLooksEncrypted(conversation) ? <EncryptedPreview /> : conversation.latestPreview}
|
|
222
|
+
</div>
|
|
223
|
+
<div className="flex items-center gap-2 mt-1 text-xs text-text-muted font-normal">
|
|
224
|
+
{conversation.messageCount > 1 && <span>{conversation.messageCount} messages</span>}
|
|
225
|
+
{/* A one-message conversation's unread state is already the row's own
|
|
226
|
+
bolding - counting it "1 unread" on every such row is just noise. */}
|
|
227
|
+
{unread && conversation.messageCount > 1 && (
|
|
228
|
+
<span className="py-0.5 px-2 rounded-pill bg-primary/15 text-primary-dark font-bold">
|
|
229
|
+
{conversation.unreadCount} unread
|
|
230
|
+
</span>
|
|
231
|
+
)}
|
|
232
|
+
{conversation.hasAttachments && (
|
|
233
|
+
<HiOutlinePaperClip size={13} aria-label="Has attachments" />
|
|
234
|
+
)}
|
|
235
|
+
{conversation.flagged && (
|
|
236
|
+
<HiOutlineFlag size={13} aria-label="Flagged" className="text-danger" />
|
|
237
|
+
)}
|
|
238
|
+
</div>
|
|
239
|
+
</button>
|
|
240
|
+
<InviteRowChip
|
|
241
|
+
message={
|
|
242
|
+
{
|
|
243
|
+
uid: conversation.latestMessageUid,
|
|
244
|
+
meetingMethod: conversation.latestMeetingMethod ?? undefined,
|
|
245
|
+
meetingResponse:
|
|
246
|
+
answers[conversation.latestMessageUid] ??
|
|
247
|
+
messageOverrides?.[conversation.latestMessageUid]?.meetingResponse ??
|
|
248
|
+
conversation.latestMeetingResponse ??
|
|
249
|
+
undefined,
|
|
250
|
+
} as Message
|
|
251
|
+
}
|
|
252
|
+
onResponded={answered}
|
|
253
|
+
className="mr-4"
|
|
254
|
+
/>
|
|
255
|
+
</div>
|
|
256
|
+
</SwipeRow>
|
|
213
257
|
<ul id={panelId} hidden={!isExpanded}>
|
|
214
258
|
{errorsById[id] && (
|
|
215
259
|
<li role="alert" className="pl-8 pr-4 py-2 text-xs text-danger border-b border-border">
|
|
@@ -259,6 +303,14 @@ export default function ConversationList({
|
|
|
259
303
|
)}
|
|
260
304
|
</div>
|
|
261
305
|
</button>
|
|
306
|
+
<InviteRowChip
|
|
307
|
+
message={{ ...message, meetingResponse: answers[message.uid] ?? message.meetingResponse }}
|
|
308
|
+
onResponded={(updated) => {
|
|
309
|
+
answered(updated);
|
|
310
|
+
onMeetingResponded?.(updated);
|
|
311
|
+
}}
|
|
312
|
+
className="ml-8 mr-4"
|
|
313
|
+
/>
|
|
262
314
|
</li>
|
|
263
315
|
);
|
|
264
316
|
})}
|