@flamingo-stack/openframe-frontend-core 0.0.210-snapshot.20260528032637 → 0.0.210
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/{chunk-P5EE2VJX.cjs → chunk-6RZYJICV.cjs} +1 -1
- package/dist/chunk-6RZYJICV.cjs.map +1 -0
- package/dist/{chunk-ZG2YY5E7.js → chunk-7L4DWM7P.js} +1 -1
- package/dist/chunk-7L4DWM7P.js.map +1 -0
- package/dist/{chunk-QKFBZLIR.js → chunk-ATEUJQKU.js} +2 -2
- package/dist/{chunk-VTUIMMHO.cjs → chunk-MDTIOPVS.cjs} +24 -24
- package/dist/{chunk-VTUIMMHO.cjs.map → chunk-MDTIOPVS.cjs.map} +1 -1
- package/dist/{chunk-3E5ANY55.js → chunk-R5RNRH62.js} +5 -14
- package/dist/chunk-R5RNRH62.js.map +1 -0
- package/dist/{chunk-WI76ZUBE.cjs → chunk-TWKPYZNQ.cjs} +17 -26
- package/dist/chunk-TWKPYZNQ.cjs.map +1 -0
- package/dist/{chunk-ZFBLC5GV.cjs → chunk-VBFOCTMD.cjs} +17 -17
- package/dist/{chunk-ZFBLC5GV.cjs.map → chunk-VBFOCTMD.cjs.map} +1 -1
- package/dist/{chunk-5BNWGK6D.js → chunk-WJBPLMBX.js} +2 -2
- package/dist/components/chat/hooks/use-chat-identity.d.ts +3 -3
- package/dist/components/chat/hooks/use-chat-identity.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/footer-waitlist-button.d.ts +2 -21
- package/dist/components/footer-waitlist-button.d.ts.map +1 -1
- package/dist/components/index.cjs +91 -87
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +16 -12
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
- package/dist/components/tickets/help-center-card.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +98 -139
- package/dist/components/tickets/index.cjs.map +1 -1
- package/dist/components/tickets/index.js +54 -95
- package/dist/components/tickets/index.js.map +1 -1
- package/dist/components/tickets/ticket-row.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/contexts/chat-runtime-context.d.ts +3 -6
- package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
- package/dist/contexts/index.cjs +2 -2
- package/dist/contexts/index.js +1 -1
- package/dist/index.cjs +3 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -4
- package/dist/utils/index.cjs +0 -10
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -10
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/hooks/use-chat-identity.ts +7 -8
- package/src/components/footer-waitlist-button.tsx +16 -33
- package/src/components/navigation/sticky-section-nav.tsx +4 -6
- package/src/components/tickets/help-center-card.tsx +1 -55
- package/src/components/tickets/help-center-list.tsx +1 -9
- package/src/components/tickets/ticket-detail-drawer.tsx +4 -19
- package/src/components/tickets/ticket-row.tsx +19 -30
- package/src/contexts/chat-runtime-context.tsx +3 -6
- package/src/stories/EmbeddableChat.stories.tsx +1 -1
- package/src/utils/index.ts +0 -12
- package/dist/chunk-3E5ANY55.js.map +0 -1
- package/dist/chunk-P5EE2VJX.cjs.map +0 -1
- package/dist/chunk-WI76ZUBE.cjs.map +0 -1
- package/dist/chunk-ZG2YY5E7.js.map +0 -1
- package/dist/utils/scroll-into-view.d.ts +0 -63
- package/dist/utils/scroll-into-view.d.ts.map +0 -1
- package/src/utils/scroll-into-view.ts +0 -74
- /package/dist/{chunk-QKFBZLIR.js.map → chunk-ATEUJQKU.js.map} +0 -0
- /package/dist/{chunk-5BNWGK6D.js.map → chunk-WJBPLMBX.js.map} +0 -0
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkVBFOCTMDcjs = require('../../chunk-VBFOCTMD.cjs');
|
|
13
13
|
require('../../chunk-VFKQMAUF.cjs');
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _chunkMDTIOPVScjs = require('../../chunk-MDTIOPVS.cjs');
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
@@ -35,15 +35,14 @@ var _chunkVTUIMMHOcjs = require('../../chunk-VTUIMMHO.cjs');
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
var _chunkWI76ZUBEcjs = require('../../chunk-WI76ZUBE.cjs');
|
|
38
|
+
var _chunkTWKPYZNQcjs = require('../../chunk-TWKPYZNQ.cjs');
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
var _chunkEH3RWVF3cjs = require('../../chunk-EH3RWVF3.cjs');
|
|
43
42
|
require('../../chunk-24KCAECR.cjs');
|
|
44
43
|
require('../../chunk-65CPJ4SX.cjs');
|
|
45
44
|
require('../../chunk-XQFFGR6U.cjs');
|
|
46
|
-
require('../../chunk-
|
|
45
|
+
require('../../chunk-6RZYJICV.cjs');
|
|
47
46
|
require('../../chunk-27APPAJN.cjs');
|
|
48
47
|
require('../../chunk-BZFW3FOF.cjs');
|
|
49
48
|
|
|
@@ -98,7 +97,7 @@ function TicketOpenForm({
|
|
|
98
97
|
}) {
|
|
99
98
|
const [subject, setSubject] = _react.useState.call(void 0, "");
|
|
100
99
|
const [content, setContent] = _react.useState.call(void 0, "");
|
|
101
|
-
const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } =
|
|
100
|
+
const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } = _chunkTWKPYZNQcjs.useChatAttachments.call(void 0, );
|
|
102
101
|
const trimmedSubject = subject.trim();
|
|
103
102
|
const trimmedContent = content.trim();
|
|
104
103
|
const overCap = content.length > TICKET_TEXT_MAX_CHARS;
|
|
@@ -118,7 +117,7 @@ function TicketOpenForm({
|
|
|
118
117
|
clear();
|
|
119
118
|
}
|
|
120
119
|
};
|
|
121
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
120
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col md:flex-row gap-6", children: [
|
|
122
121
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 min-w-0 md:max-w-md", children: [
|
|
123
122
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-2xl font-semibold text-ods-text-primary mb-2", children: "Need Support?" }),
|
|
124
123
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-sm", children: "Can't find what you're looking for? Submit a support ticket below \u2014 we'll follow up shortly." }),
|
|
@@ -157,7 +156,7 @@ function TicketOpenForm({
|
|
|
157
156
|
}
|
|
158
157
|
),
|
|
159
158
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
160
|
-
|
|
159
|
+
_chunkTWKPYZNQcjs.Textarea,
|
|
161
160
|
{
|
|
162
161
|
id: "ticket-content",
|
|
163
162
|
placeholder: "Describe your issue or question in detail...",
|
|
@@ -181,7 +180,7 @@ function TicketOpenForm({
|
|
|
181
180
|
)
|
|
182
181
|
] }),
|
|
183
182
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
184
|
-
|
|
183
|
+
_chunkTWKPYZNQcjs.ChatAttachmentChipStrip,
|
|
185
184
|
{
|
|
186
185
|
attachments,
|
|
187
186
|
onRemove: removeAttachment,
|
|
@@ -190,7 +189,7 @@ function TicketOpenForm({
|
|
|
190
189
|
),
|
|
191
190
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-3", children: [
|
|
192
191
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
193
|
-
|
|
192
|
+
_chunkTWKPYZNQcjs.ChatAttachmentAddButton,
|
|
194
193
|
{
|
|
195
194
|
attachmentsEnabled: !supportSystemDown,
|
|
196
195
|
attachmentsCount: attachments.length,
|
|
@@ -228,7 +227,7 @@ _chunkUXZ3ZJ3Mcjs.init_button2.call(void 0, );
|
|
|
228
227
|
|
|
229
228
|
var LIST_ENGAGEMENTS_ENDPOINT = "/api/chat/agent/list-engagements";
|
|
230
229
|
function useTicketEngagements(externalTicketId, enabled = true) {
|
|
231
|
-
const identity =
|
|
230
|
+
const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
|
|
232
231
|
const identityKey = _nullishCoalesce(_optionalChain([identity, 'access', _ => _.user, 'optionalAccess', _2 => _2.email]), () => ( "anon"));
|
|
233
232
|
const queryEnabled = enabled && identity.authTier !== "anon" && !!_optionalChain([identity, 'access', _3 => _3.user, 'optionalAccess', _4 => _4.email]) && !!externalTicketId && !externalTicketId.startsWith("temp-");
|
|
234
233
|
const query = _reactquery.useQuery.call(void 0, {
|
|
@@ -242,7 +241,7 @@ function useTicketEngagements(externalTicketId, enabled = true) {
|
|
|
242
241
|
refetchOnMount: "always",
|
|
243
242
|
refetchOnWindowFocus: true,
|
|
244
243
|
queryFn: async () => {
|
|
245
|
-
const response = await
|
|
244
|
+
const response = await _chunkTWKPYZNQcjs.embedAuthedFetch.call(void 0, LIST_ENGAGEMENTS_ENDPOINT, {
|
|
246
245
|
method: "POST",
|
|
247
246
|
body: JSON.stringify({ ticket_id: externalTicketId })
|
|
248
247
|
});
|
|
@@ -290,7 +289,7 @@ function TicketLinkedDeliveryCard({
|
|
|
290
289
|
{
|
|
291
290
|
className: `rounded-md border border-ods-border bg-ods-bg overflow-hidden ${_nullishCoalesce(className, () => ( ""))}`,
|
|
292
291
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
293
|
-
|
|
292
|
+
_chunkVBFOCTMDcjs.DeliveryRow,
|
|
294
293
|
{
|
|
295
294
|
item,
|
|
296
295
|
href: clickup.delivery_href,
|
|
@@ -343,7 +342,7 @@ function TicketDetailDrawer({
|
|
|
343
342
|
}
|
|
344
343
|
var TURN_SEPARATOR_RE = /[\s]{1,16}---[\s]{1,16}/g;
|
|
345
344
|
function TicketTimelinePanel({ ticket }) {
|
|
346
|
-
const identity =
|
|
345
|
+
const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
|
|
347
346
|
const externalId = isOptimistic(ticket) ? null : ticket.external_id;
|
|
348
347
|
const { engagements, isLoading } = useTicketEngagements(externalId, !!externalId);
|
|
349
348
|
const bodyTurns = ticket.body ? ticket.body.split(TURN_SEPARATOR_RE).map((t) => t.trim()).filter(Boolean) : [];
|
|
@@ -355,10 +354,10 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
355
354
|
const customerAvatar = isViewerTheCustomer ? _nullishCoalesce(_optionalChain([identity, 'access', _20 => _20.user, 'optionalAccess', _21 => _21.avatarUrl]), () => ( void 0)) : void 0;
|
|
356
355
|
if (bodyTurns.length === 0 && engagements.length === 0) {
|
|
357
356
|
if (isLoading) {
|
|
358
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
357
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.ConversationCardRowSkeletonList, { rows: 2 });
|
|
359
358
|
}
|
|
360
359
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
361
|
-
|
|
360
|
+
_chunkVBFOCTMDcjs.EmptyState,
|
|
362
361
|
{
|
|
363
362
|
type: "generic",
|
|
364
363
|
title: "No conversation yet",
|
|
@@ -373,7 +372,7 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
373
372
|
const role = i === 0 ? "Original message" : isResolution ? "Resolution" : `Update ${i}`;
|
|
374
373
|
const text = isResolution ? turn.replace(/^\[Resolution\]\s*/, "") : turn;
|
|
375
374
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
376
|
-
|
|
375
|
+
_chunkVBFOCTMDcjs.ConversationCardRow,
|
|
377
376
|
{
|
|
378
377
|
author: customerName,
|
|
379
378
|
role,
|
|
@@ -403,10 +402,10 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
403
402
|
avatarSrc = void 0;
|
|
404
403
|
}
|
|
405
404
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
406
|
-
|
|
405
|
+
_chunkVBFOCTMDcjs.ConversationCardRow,
|
|
407
406
|
{
|
|
408
407
|
author,
|
|
409
|
-
role: "Reply",
|
|
408
|
+
role: isCustomer ? "Reply" : "Note",
|
|
410
409
|
avatarSrc,
|
|
411
410
|
timestamp: eng.createdAt,
|
|
412
411
|
body: stripAttachmentsPreamble(_nullishCoalesce(eng.body, () => ( ""))),
|
|
@@ -420,7 +419,7 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
420
419
|
// content rendered — drawer is showing the customer's body
|
|
421
420
|
// turns + cached engagements while a background refetch is
|
|
422
421
|
// in flight. Single row keeps the placeholder modest.
|
|
423
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
422
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.ConversationCardRowSkeletonList, { rows: 1 })
|
|
424
423
|
] });
|
|
425
424
|
}
|
|
426
425
|
function mapEngagementAttachments(files) {
|
|
@@ -473,7 +472,7 @@ function OpenActions({
|
|
|
473
472
|
const [messageText, setMessageText] = _react.useState.call(void 0, "");
|
|
474
473
|
const [resolution, setResolution] = _react.useState.call(void 0, "");
|
|
475
474
|
const [closeDialogOpen, setCloseDialogOpen] = _react.useState.call(void 0, false);
|
|
476
|
-
const attachments =
|
|
475
|
+
const attachments = _chunkTWKPYZNQcjs.useChatAttachments.call(void 0, );
|
|
477
476
|
const disabled = busy || supportSystemDown;
|
|
478
477
|
const ticketRef = { id: ticket.id, external_id: ticket.external_id };
|
|
479
478
|
const hasText = messageText.trim().length > 0;
|
|
@@ -496,7 +495,7 @@ function OpenActions({
|
|
|
496
495
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-3", children: [
|
|
497
496
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", children: [
|
|
498
497
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
499
|
-
|
|
498
|
+
_chunkTWKPYZNQcjs.Textarea,
|
|
500
499
|
{
|
|
501
500
|
value: messageText,
|
|
502
501
|
onChange: (e) => setMessageText(e.target.value),
|
|
@@ -507,7 +506,7 @@ function OpenActions({
|
|
|
507
506
|
}
|
|
508
507
|
),
|
|
509
508
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
510
|
-
|
|
509
|
+
_chunkTWKPYZNQcjs.ChatAttachmentChipStrip,
|
|
511
510
|
{
|
|
512
511
|
attachments: attachments.attachments,
|
|
513
512
|
onRemove: attachments.removeAttachment,
|
|
@@ -517,7 +516,7 @@ function OpenActions({
|
|
|
517
516
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center gap-2 flex-wrap", children: [
|
|
518
517
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
|
|
519
518
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
520
|
-
|
|
519
|
+
_chunkTWKPYZNQcjs.ChatAttachmentAddButton,
|
|
521
520
|
{
|
|
522
521
|
attachmentsEnabled: !supportSystemDown,
|
|
523
522
|
attachmentsCount: attachments.attachments.length,
|
|
@@ -552,13 +551,13 @@ function OpenActions({
|
|
|
552
551
|
] })
|
|
553
552
|
] })
|
|
554
553
|
] }),
|
|
555
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
556
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
557
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
558
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
554
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.AlertDialog, { open: closeDialogOpen, onOpenChange: setCloseDialogOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.AlertDialogContent, { className: "bg-ods-card border-ods-border", children: [
|
|
555
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.AlertDialogHeader, { children: [
|
|
556
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.AlertDialogTitle, { className: "text-ods-text-primary font-['DM_Sans'] text-[20px] font-semibold", children: "Close this ticket?" }),
|
|
557
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.AlertDialogDescription, { className: "text-ods-text-secondary font-['DM_Sans'] text-[14px]", children: "Add an optional resolution note below. You can reopen the ticket later if needed." })
|
|
559
558
|
] }),
|
|
560
559
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
561
|
-
|
|
560
|
+
_chunkTWKPYZNQcjs.Textarea,
|
|
562
561
|
{
|
|
563
562
|
value: resolution,
|
|
564
563
|
onChange: (e) => setResolution(e.target.value),
|
|
@@ -568,9 +567,9 @@ function OpenActions({
|
|
|
568
567
|
className: "mt-2"
|
|
569
568
|
}
|
|
570
569
|
),
|
|
571
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
570
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.AlertDialogFooter, { children: [
|
|
572
571
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
573
|
-
|
|
572
|
+
_chunkTWKPYZNQcjs.AlertDialogCancel,
|
|
574
573
|
{
|
|
575
574
|
disabled: busy,
|
|
576
575
|
className: "bg-transparent border-ods-border text-ods-text-primary hover:bg-ods-border",
|
|
@@ -578,7 +577,7 @@ function OpenActions({
|
|
|
578
577
|
}
|
|
579
578
|
),
|
|
580
579
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
581
|
-
|
|
580
|
+
_chunkTWKPYZNQcjs.AlertDialogAction,
|
|
582
581
|
{
|
|
583
582
|
onClick: () => void confirmClose(),
|
|
584
583
|
disabled: busy,
|
|
@@ -606,22 +605,14 @@ function TicketRow({
|
|
|
606
605
|
}) {
|
|
607
606
|
const optimistic = isOptimistic(ticket);
|
|
608
607
|
const rowRef = _react.useRef.call(void 0, null);
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
'div[id^="ticket-drawer-"]'
|
|
616
|
-
);
|
|
617
|
-
if (!(expandedDrawer instanceof HTMLElement)) return raw;
|
|
618
|
-
const drawerRect = expandedDrawer.getBoundingClientRect();
|
|
619
|
-
const myRect = rowRef.current.getBoundingClientRect();
|
|
620
|
-
if (drawerRect.bottom > myRect.top) return raw;
|
|
621
|
-
return raw - drawerRect.height;
|
|
622
|
-
}
|
|
608
|
+
_react.useEffect.call(void 0, () => {
|
|
609
|
+
if (!expanded || optimistic) return;
|
|
610
|
+
requestAnimationFrame(() => {
|
|
611
|
+
requestAnimationFrame(() => {
|
|
612
|
+
_optionalChain([rowRef, 'access', _30 => _30.current, 'optionalAccess', _31 => _31.scrollIntoView, 'call', _32 => _32({ behavior: "smooth", block: "start" })]);
|
|
613
|
+
});
|
|
623
614
|
});
|
|
624
|
-
}, [
|
|
615
|
+
}, [expanded, optimistic]);
|
|
625
616
|
const tileData = {
|
|
626
617
|
id: ticket.id,
|
|
627
618
|
title: _nullishCoalesce(ticket.subject, () => ( "(untitled)")),
|
|
@@ -634,7 +625,7 @@ function TicketRow({
|
|
|
634
625
|
// so the badge accurately reflects "Closed" with a checkmark.
|
|
635
626
|
statusLabel: _nullishCoalesce(ticket.pipeline_stage_label, () => ( void 0)),
|
|
636
627
|
category: _nullishCoalesce(ticket.customer_company, () => ( void 0)),
|
|
637
|
-
timeAgo: ticket.hubspot_updated_at ?
|
|
628
|
+
timeAgo: ticket.hubspot_updated_at ? _chunkTWKPYZNQcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : void 0,
|
|
638
629
|
// Linked-work chip: surfaced whenever the ticket has a linked
|
|
639
630
|
// ClickUp task. Uses the linked task's own status so the chip text
|
|
640
631
|
// reads "Working" / "Waiting on version release" / etc. — useful
|
|
@@ -642,17 +633,17 @@ function TicketRow({
|
|
|
642
633
|
// when the task exists but its status hasn't synced yet.
|
|
643
634
|
linkedTaskLabel: ticket.clickup ? ticket.clickup.status ? ticket.clickup.status.replace(/\b\w/g, (c) => c.toUpperCase()) : "Linked work" : void 0
|
|
644
635
|
};
|
|
645
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rowRef, className: "scroll-mt-
|
|
636
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rowRef, className: "scroll-mt-4", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
646
637
|
Collapsible,
|
|
647
638
|
{
|
|
648
639
|
open: expanded && !optimistic,
|
|
649
640
|
className: "border-b border-ods-border last:border-b-0",
|
|
650
641
|
children: [
|
|
651
642
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
652
|
-
|
|
643
|
+
_chunkTWKPYZNQcjs.ChatTicketItem,
|
|
653
644
|
{
|
|
654
645
|
ticket: tileData,
|
|
655
|
-
onClick: optimistic ? void 0 :
|
|
646
|
+
onClick: optimistic ? void 0 : onToggle,
|
|
656
647
|
"aria-expanded": expanded && !optimistic,
|
|
657
648
|
"aria-controls": `ticket-drawer-${ticket.id}`
|
|
658
649
|
}
|
|
@@ -713,7 +704,7 @@ function useTicketsList(filters) {
|
|
|
713
704
|
pageSize
|
|
714
705
|
};
|
|
715
706
|
if (statusFilter) body.status = statusFilter;
|
|
716
|
-
const response = await
|
|
707
|
+
const response = await _chunkTWKPYZNQcjs.embedAuthedFetch.call(void 0, FIND_TICKET_ENDPOINT, {
|
|
717
708
|
method: "POST",
|
|
718
709
|
body: JSON.stringify(body)
|
|
719
710
|
});
|
|
@@ -725,12 +716,12 @@ function useTicketsList(filters) {
|
|
|
725
716
|
}
|
|
726
717
|
});
|
|
727
718
|
const data = query.data;
|
|
728
|
-
const totalCount = _nullishCoalesce(_nullishCoalesce(_optionalChain([data, 'optionalAccess',
|
|
729
|
-
const echoedPage = _nullishCoalesce(_optionalChain([data, 'optionalAccess',
|
|
730
|
-
const echoedPageSize = _nullishCoalesce(_optionalChain([data, 'optionalAccess',
|
|
731
|
-
const totalPages = _nullishCoalesce(_optionalChain([data, 'optionalAccess',
|
|
719
|
+
const totalCount = _nullishCoalesce(_nullishCoalesce(_optionalChain([data, 'optionalAccess', _33 => _33.totalCount]), () => ( _optionalChain([data, 'optionalAccess', _34 => _34.count]))), () => ( (_nullishCoalesce(_optionalChain([data, 'optionalAccess', _35 => _35.tickets, 'optionalAccess', _36 => _36.length]), () => ( 0)))));
|
|
720
|
+
const echoedPage = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _37 => _37.page]), () => ( page));
|
|
721
|
+
const echoedPageSize = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _38 => _38.pageSize]), () => ( pageSize));
|
|
722
|
+
const totalPages = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _39 => _39.totalPages]), () => ( Math.max(1, Math.ceil(totalCount / echoedPageSize))));
|
|
732
723
|
return {
|
|
733
|
-
tickets: _nullishCoalesce(_optionalChain([data, 'optionalAccess',
|
|
724
|
+
tickets: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _40 => _40.tickets]), () => ( [])),
|
|
734
725
|
// Loading-state-truth = `data === undefined`. TanStack v5's
|
|
735
726
|
// `isPending` / `isLoading` flags can be `false` in transient
|
|
736
727
|
// windows where the query is enabled-but-fetch-not-yet-fired
|
|
@@ -752,7 +743,7 @@ function useTicketsList(filters) {
|
|
|
752
743
|
// - Background refetch with existing data: data !== undefined → no load
|
|
753
744
|
// - Filter-change refetch landing on empty results: data?.tickets===[]
|
|
754
745
|
// + isFetching → bridge skeleton (the `||` branch)
|
|
755
|
-
isLoading: enabled && (data === void 0 || query.isFetching && (_nullishCoalesce(_optionalChain([data, 'optionalAccess',
|
|
746
|
+
isLoading: enabled && (data === void 0 || query.isFetching && (_nullishCoalesce(_optionalChain([data, 'optionalAccess', _41 => _41.tickets]), () => ( []))).length === 0),
|
|
756
747
|
isFetching: query.isFetching,
|
|
757
748
|
error: _nullishCoalesce(query.error, () => ( null)),
|
|
758
749
|
refetch: () => {
|
|
@@ -801,7 +792,7 @@ function useTicketActions(options) {
|
|
|
801
792
|
}, []);
|
|
802
793
|
const executeTicketAction = _react.useCallback.call(void 0,
|
|
803
794
|
async (toolName, args) => {
|
|
804
|
-
const res = await
|
|
795
|
+
const res = await _chunkTWKPYZNQcjs.embedAuthedFetch.call(void 0, TICKET_ACTION_ENDPOINT, {
|
|
805
796
|
method: "POST",
|
|
806
797
|
body: JSON.stringify({ tool_name: toolName, args })
|
|
807
798
|
});
|
|
@@ -907,7 +898,7 @@ function useTicketActions(options) {
|
|
|
907
898
|
const result = await executeTicketAction("create_ticket", {
|
|
908
899
|
subject: input.subject.trim(),
|
|
909
900
|
content: input.content.trim(),
|
|
910
|
-
..._optionalChain([input, 'access',
|
|
901
|
+
..._optionalChain([input, 'access', _42 => _42.attachments, 'optionalAccess', _43 => _43.length]) ? { attachments: input.attachments } : {}
|
|
911
902
|
});
|
|
912
903
|
if (result.mirror_synced === false) {
|
|
913
904
|
toast2(TOAST_COPY.open_mirror_pending);
|
|
@@ -995,7 +986,7 @@ function useTicketActions(options) {
|
|
|
995
986
|
ticket,
|
|
996
987
|
{
|
|
997
988
|
status: "CLOSED",
|
|
998
|
-
..._optionalChain([resolution, 'optionalAccess',
|
|
989
|
+
..._optionalChain([resolution, 'optionalAccess', _44 => _44.trim, 'call', _45 => _45()]) ? { resolution: resolution.trim() } : {}
|
|
999
990
|
},
|
|
1000
991
|
TOAST_COPY.close_success,
|
|
1001
992
|
"close ticket"
|
|
@@ -1057,7 +1048,7 @@ function mapTicketActionError(err) {
|
|
|
1057
1048
|
removeRowFromCache: false
|
|
1058
1049
|
};
|
|
1059
1050
|
case "RATE_LIMITED": {
|
|
1060
|
-
const retryAfterRaw = _optionalChain([err, 'access',
|
|
1051
|
+
const retryAfterRaw = _optionalChain([err, 'access', _46 => _46.response, 'optionalAccess', _47 => _47.headers, 'access', _48 => _48.get, 'call', _49 => _49("Retry-After")]);
|
|
1061
1052
|
const retryAfterSeconds = retryAfterRaw ? parseInt(retryAfterRaw, 10) : void 0;
|
|
1062
1053
|
return {
|
|
1063
1054
|
code: err.code,
|
|
@@ -1115,13 +1106,13 @@ function resolveErrorCode(bodyCode, status) {
|
|
|
1115
1106
|
// src/components/tickets/ticket-center.tsx
|
|
1116
1107
|
|
|
1117
1108
|
function TicketCenter({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
|
|
1118
|
-
const identity =
|
|
1109
|
+
const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
|
|
1119
1110
|
if (identity.isLoading) {
|
|
1120
1111
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketCenterSkeleton, {});
|
|
1121
1112
|
}
|
|
1122
|
-
if (identity.authTier === "anon" || !_optionalChain([identity, 'access',
|
|
1113
|
+
if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _50 => _50.user, 'optionalAccess', _51 => _51.email])) {
|
|
1123
1114
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1124
|
-
|
|
1115
|
+
_chunkVBFOCTMDcjs.EmptyState,
|
|
1125
1116
|
{
|
|
1126
1117
|
type: "generic",
|
|
1127
1118
|
title: "Sign in to manage tickets",
|
|
@@ -1192,7 +1183,7 @@ function TicketCenterAuthed({
|
|
|
1192
1183
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3 text-xs text-ods-text-secondary", children: [
|
|
1193
1184
|
lastUpdatedAt && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
|
|
1194
1185
|
"Updated ",
|
|
1195
|
-
|
|
1186
|
+
_chunkTWKPYZNQcjs.formatRelativeTime.call(void 0, new Date(lastUpdatedAt))
|
|
1196
1187
|
] }),
|
|
1197
1188
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1198
1189
|
_chunkUXZ3ZJ3Mcjs.Button,
|
|
@@ -1208,15 +1199,15 @@ function TicketCenterAuthed({
|
|
|
1208
1199
|
)
|
|
1209
1200
|
] })
|
|
1210
1201
|
] }),
|
|
1211
|
-
isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketListSkeleton, {}) : merged.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1212
|
-
|
|
1202
|
+
isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketListSkeleton, {}) : merged.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1203
|
+
_chunkVBFOCTMDcjs.EmptyState,
|
|
1213
1204
|
{
|
|
1214
1205
|
type: "generic",
|
|
1215
1206
|
title: "No tickets yet",
|
|
1216
1207
|
description: "Open one above to start the conversation.",
|
|
1217
1208
|
showCTA: false
|
|
1218
1209
|
}
|
|
1219
|
-
) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1210
|
+
) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "overflow-hidden", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1220
1211
|
TicketRow,
|
|
1221
1212
|
{
|
|
1222
1213
|
ticket,
|
|
@@ -1236,7 +1227,7 @@ function TicketCenterAuthed({
|
|
|
1236
1227
|
}
|
|
1237
1228
|
function TicketCenterSkeleton() {
|
|
1238
1229
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6", children: [
|
|
1239
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1230
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "p-6", children: [
|
|
1240
1231
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-7 w-48 mb-4" }),
|
|
1241
1232
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-10 w-full mb-3" }),
|
|
1242
1233
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-24 w-full" })
|
|
@@ -1245,7 +1236,7 @@ function TicketCenterSkeleton() {
|
|
|
1245
1236
|
] });
|
|
1246
1237
|
}
|
|
1247
1238
|
function TicketListSkeleton() {
|
|
1248
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1239
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "overflow-hidden", children: [0, 1, 2].map((i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "h-20 px-4 flex items-center gap-4 border-b border-ods-border last:border-b-0", children: [
|
|
1249
1240
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 flex flex-col gap-2", children: [
|
|
1250
1241
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-4 w-2/3" }),
|
|
1251
1242
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-3 w-full" })
|
|
@@ -1258,12 +1249,10 @@ function TicketListSkeleton() {
|
|
|
1258
1249
|
// src/components/tickets/help-center-list.tsx
|
|
1259
1250
|
|
|
1260
1251
|
|
|
1261
|
-
|
|
1252
|
+
_chunkVBFOCTMDcjs.init_unified_pagination.call(void 0, );
|
|
1262
1253
|
|
|
1263
1254
|
// src/components/tickets/help-center-card.tsx
|
|
1264
1255
|
|
|
1265
|
-
|
|
1266
|
-
var STICKY_HEADER_OFFSET_PX = 96;
|
|
1267
1256
|
function HelpCenterCard({
|
|
1268
1257
|
ticket,
|
|
1269
1258
|
expanded,
|
|
@@ -1278,42 +1267,24 @@ function HelpCenterCard({
|
|
|
1278
1267
|
const optimistic = isOptimistic(ticket);
|
|
1279
1268
|
const rawStatus = (_nullishCoalesce(ticket.status, () => ( "OPEN"))).toUpperCase();
|
|
1280
1269
|
const priority = (_nullishCoalesce(ticket.priority, () => ( ""))).toUpperCase();
|
|
1281
|
-
const relativeUpdated = ticket.hubspot_updated_at ?
|
|
1270
|
+
const relativeUpdated = ticket.hubspot_updated_at ? _chunkTWKPYZNQcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : "recently";
|
|
1282
1271
|
const title = (ticket.subject || "").trim() || "(untitled)";
|
|
1283
1272
|
const subtitle = `UPDATED ${relativeUpdated}, #${ticket.external_id || "\u2014"}${ticket.pipeline_stage_label ? `, ${ticket.pipeline_stage_label}` : ""}`;
|
|
1284
1273
|
const description = _nullishCoalesce(_nullishCoalesce(ticket.preview, () => ( ticket.body)), () => ( ""));
|
|
1285
1274
|
const isExpandable = !optimistic;
|
|
1286
1275
|
const isExpanded = expanded && isExpandable;
|
|
1287
|
-
const rowRef = _react.useRef.call(void 0, null);
|
|
1288
|
-
const handleClick = _react.useCallback.call(void 0, () => {
|
|
1289
|
-
onToggle(ticket.id);
|
|
1290
|
-
_chunkWI76ZUBEcjs.scrollElementIntoView.call(void 0, rowRef.current, {
|
|
1291
|
-
headerOffset: STICKY_HEADER_OFFSET_PX,
|
|
1292
|
-
adjustTargetY: (raw) => {
|
|
1293
|
-
if (!rowRef.current) return raw;
|
|
1294
|
-
const expandedDrawer = document.querySelector(
|
|
1295
|
-
'div[id^="help-center-drawer-"]'
|
|
1296
|
-
);
|
|
1297
|
-
if (!(expandedDrawer instanceof HTMLElement)) return raw;
|
|
1298
|
-
const drawerRect = expandedDrawer.getBoundingClientRect();
|
|
1299
|
-
const myRect = rowRef.current.getBoundingClientRect();
|
|
1300
|
-
if (drawerRect.bottom > myRect.top) return raw;
|
|
1301
|
-
return raw - drawerRect.height;
|
|
1302
|
-
}
|
|
1303
|
-
});
|
|
1304
|
-
}, [onToggle, ticket.id]);
|
|
1305
1276
|
const rightBadges = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1306
1277
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1307
|
-
|
|
1278
|
+
_chunkTWKPYZNQcjs.StatusBadge,
|
|
1308
1279
|
{
|
|
1309
1280
|
text: rawStatus,
|
|
1310
|
-
colorScheme:
|
|
1281
|
+
colorScheme: _chunkTWKPYZNQcjs.getStatusColorScheme.call(void 0, rawStatus),
|
|
1311
1282
|
variant: "card",
|
|
1312
1283
|
className: "border border-ods-border"
|
|
1313
1284
|
}
|
|
1314
1285
|
),
|
|
1315
1286
|
priority && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1316
|
-
|
|
1287
|
+
_chunkTWKPYZNQcjs.StatusBadge,
|
|
1317
1288
|
{
|
|
1318
1289
|
text: priority,
|
|
1319
1290
|
colorScheme: mapPriorityScheme(priority),
|
|
@@ -1325,8 +1296,6 @@ function HelpCenterCard({
|
|
|
1325
1296
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1326
1297
|
"div",
|
|
1327
1298
|
{
|
|
1328
|
-
ref: rowRef,
|
|
1329
|
-
style: { scrollMarginTop: STICKY_HEADER_OFFSET_PX },
|
|
1330
1299
|
className: `border-b border-ods-border last:border-b-0 ${optimistic ? "opacity-60" : ""}`,
|
|
1331
1300
|
"aria-busy": optimistic || void 0,
|
|
1332
1301
|
children: [
|
|
@@ -1334,13 +1303,13 @@ function HelpCenterCard({
|
|
|
1334
1303
|
"button",
|
|
1335
1304
|
{
|
|
1336
1305
|
type: "button",
|
|
1337
|
-
onClick: isExpandable ?
|
|
1306
|
+
onClick: isExpandable ? () => onToggle(ticket.id) : void 0,
|
|
1338
1307
|
disabled: !isExpandable,
|
|
1339
1308
|
"aria-expanded": isExpandable ? isExpanded : void 0,
|
|
1340
1309
|
"aria-controls": isExpanded ? `help-center-drawer-${ticket.id}` : void 0,
|
|
1341
1310
|
className: "w-full text-left p-[12px] md:p-[16px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-inset disabled:cursor-default",
|
|
1342
1311
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1343
|
-
|
|
1312
|
+
_chunkVBFOCTMDcjs.DevCardRowContent,
|
|
1344
1313
|
{
|
|
1345
1314
|
title,
|
|
1346
1315
|
subtitle,
|
|
@@ -1413,7 +1382,7 @@ function HelpCenterCreateForm({
|
|
|
1413
1382
|
const [subject, setSubject] = _react.useState.call(void 0, "");
|
|
1414
1383
|
const [subjectError, setSubjectError] = _react.useState.call(void 0, null);
|
|
1415
1384
|
const subjectField = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
|
|
1416
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1385
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.Label, { htmlFor: "help-center-subject", children: [
|
|
1417
1386
|
"Subject",
|
|
1418
1387
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-accent", children: "*" })
|
|
1419
1388
|
] }),
|
|
@@ -1445,7 +1414,7 @@ function HelpCenterCreateForm({
|
|
|
1445
1414
|
)
|
|
1446
1415
|
] });
|
|
1447
1416
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1448
|
-
|
|
1417
|
+
_chunkMDTIOPVScjs.ContactForm,
|
|
1449
1418
|
{
|
|
1450
1419
|
title: "Open a new ticket",
|
|
1451
1420
|
footerText: "The support team typically responds within one business day.",
|
|
@@ -1483,7 +1452,7 @@ function HelpCenterCreateForm({
|
|
|
1483
1452
|
// src/components/tickets/help-center-list.tsx
|
|
1484
1453
|
|
|
1485
1454
|
function HelpCenterList({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
|
|
1486
|
-
const identity =
|
|
1455
|
+
const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
|
|
1487
1456
|
const searchParams = _chunkG7UE6RKVcjs.useSearchParams.call(void 0, );
|
|
1488
1457
|
const router = _chunkG7UE6RKVcjs.useRouter.call(void 0, );
|
|
1489
1458
|
const pathname = _chunkG7UE6RKVcjs.usePathname.call(void 0, );
|
|
@@ -1492,11 +1461,11 @@ function HelpCenterList({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
|
|
|
1492
1461
|
const rawPage = Number(searchParams.get("page"));
|
|
1493
1462
|
const page = Number.isFinite(rawPage) && rawPage > 0 ? Math.floor(rawPage) : 1;
|
|
1494
1463
|
if (identity.isLoading) {
|
|
1495
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1464
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevSectionPage, { sectionKey: "tickets", preControls: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpCenterCreateFormSkeleton, {}), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevCardRowSkeletonList, {}) });
|
|
1496
1465
|
}
|
|
1497
|
-
if (identity.authTier === "anon" || !_optionalChain([identity, 'access',
|
|
1498
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1499
|
-
|
|
1466
|
+
if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _52 => _52.user, 'optionalAccess', _53 => _53.email])) {
|
|
1467
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevSectionPage, { sectionKey: "tickets", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1468
|
+
_chunkVBFOCTMDcjs.EmptyState,
|
|
1500
1469
|
{
|
|
1501
1470
|
type: "generic",
|
|
1502
1471
|
title: "Sign in to manage tickets",
|
|
@@ -1505,7 +1474,7 @@ function HelpCenterList({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
|
|
|
1505
1474
|
}
|
|
1506
1475
|
) });
|
|
1507
1476
|
}
|
|
1508
|
-
const sessionName = [_optionalChain([identity, 'access',
|
|
1477
|
+
const sessionName = [_optionalChain([identity, 'access', _54 => _54.user, 'optionalAccess', _55 => _55.firstName]), _optionalChain([identity, 'access', _56 => _56.user, 'optionalAccess', _57 => _57.lastName])].filter(Boolean).join(" ").trim() || _optionalChain([identity, 'access', _58 => _58.user, 'optionalAccess', _59 => _59.email, 'optionalAccess', _60 => _60.split, 'call', _61 => _61("@"), 'access', _62 => _62[0]]) || "Customer";
|
|
1509
1478
|
const sessionEmail = identity.user.email;
|
|
1510
1479
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1511
1480
|
HelpCenterListAuthed,
|
|
@@ -1596,15 +1565,15 @@ function HelpCenterListAuthed({
|
|
|
1596
1565
|
] }),
|
|
1597
1566
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Button, { type: "button", variant: "accent", onClick: () => refetch(), children: "Retry" })
|
|
1598
1567
|
] }),
|
|
1599
|
-
!error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1568
|
+
!error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevCardRowSkeletonList, {}) : !hasResults && isFetching ? (
|
|
1600
1569
|
// Bridge state — background refetch in flight and the
|
|
1601
1570
|
// optimistic placeholder was just removed by the mutation
|
|
1602
1571
|
// callback. Without this branch "No tickets yet" would flash
|
|
1603
1572
|
// for ~50ms between `removeOptimistic` and the server
|
|
1604
1573
|
// response landing.
|
|
1605
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1574
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevCardRowSkeletonList, { rows: 1 })
|
|
1606
1575
|
) : !hasResults ? hasActiveFilters ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1607
|
-
|
|
1576
|
+
_chunkVBFOCTMDcjs.EmptyState,
|
|
1608
1577
|
{
|
|
1609
1578
|
type: "search",
|
|
1610
1579
|
title: "No tickets found",
|
|
@@ -1619,41 +1588,31 @@ function HelpCenterListAuthed({
|
|
|
1619
1588
|
}
|
|
1620
1589
|
}
|
|
1621
1590
|
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1622
|
-
|
|
1591
|
+
_chunkVBFOCTMDcjs.EmptyState,
|
|
1623
1592
|
{
|
|
1624
1593
|
type: "generic",
|
|
1625
1594
|
title: "No tickets yet",
|
|
1626
1595
|
description: "Open one above to start the conversation with the support team.",
|
|
1627
1596
|
showCTA: false
|
|
1628
1597
|
}
|
|
1629
|
-
) : (
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
supportSystemDown,
|
|
1646
|
-
onSendMessage: actions.sendMessage,
|
|
1647
|
-
onClose: actions.closeTicket,
|
|
1648
|
-
onReopen: actions.reopenTicket,
|
|
1649
|
-
onActionCollapsed: () => setExpandedTicketId(null)
|
|
1650
|
-
},
|
|
1651
|
-
ticket.id
|
|
1652
|
-
)) })
|
|
1653
|
-
) }),
|
|
1654
|
-
!error && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.UnifiedPagination, { currentPage: page, totalPages })
|
|
1598
|
+
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1599
|
+
HelpCenterCard,
|
|
1600
|
+
{
|
|
1601
|
+
ticket,
|
|
1602
|
+
expanded: expandedTicketId === ticket.id,
|
|
1603
|
+
onToggle: toggleRow,
|
|
1604
|
+
busy: isOptimistic(ticket) ? false : actions.isRowBusy(ticket.id),
|
|
1605
|
+
supportSystemDown,
|
|
1606
|
+
onSendMessage: actions.sendMessage,
|
|
1607
|
+
onClose: actions.closeTicket,
|
|
1608
|
+
onReopen: actions.reopenTicket,
|
|
1609
|
+
onActionCollapsed: () => setExpandedTicketId(null)
|
|
1610
|
+
},
|
|
1611
|
+
ticket.id
|
|
1612
|
+
)) }) }),
|
|
1613
|
+
!error && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.UnifiedPagination, { currentPage: page, totalPages })
|
|
1655
1614
|
] });
|
|
1656
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1615
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevSectionPage, { sectionKey: "tickets", preControls: form, children: body });
|
|
1657
1616
|
}
|
|
1658
1617
|
|
|
1659
1618
|
|