@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 @@ import {
|
|
|
9
9
|
EmptyState,
|
|
10
10
|
UnifiedPagination,
|
|
11
11
|
init_unified_pagination
|
|
12
|
-
} from "../../chunk-
|
|
12
|
+
} from "../../chunk-ATEUJQKU.js";
|
|
13
13
|
import "../../chunk-4XLJWX2N.js";
|
|
14
14
|
import {
|
|
15
15
|
ContactForm
|
|
16
|
-
} from "../../chunk-
|
|
16
|
+
} from "../../chunk-WJBPLMBX.js";
|
|
17
17
|
import {
|
|
18
18
|
AlertDialog,
|
|
19
19
|
AlertDialogAction,
|
|
@@ -33,17 +33,16 @@ import {
|
|
|
33
33
|
embedAuthedFetch,
|
|
34
34
|
formatRelativeTime,
|
|
35
35
|
getStatusColorScheme,
|
|
36
|
-
scrollElementIntoView,
|
|
37
36
|
useChatAttachments,
|
|
38
37
|
useChatIdentity
|
|
39
|
-
} from "../../chunk-
|
|
38
|
+
} from "../../chunk-R5RNRH62.js";
|
|
40
39
|
import {
|
|
41
40
|
toast
|
|
42
41
|
} from "../../chunk-UYQOPC57.js";
|
|
43
42
|
import "../../chunk-CIPO6DXK.js";
|
|
44
43
|
import "../../chunk-EDW2NVRV.js";
|
|
45
44
|
import "../../chunk-W72U7OU7.js";
|
|
46
|
-
import "../../chunk-
|
|
45
|
+
import "../../chunk-7L4DWM7P.js";
|
|
47
46
|
import "../../chunk-MJNXIEV2.js";
|
|
48
47
|
import "../../chunk-EL5YVPD5.js";
|
|
49
48
|
import {
|
|
@@ -64,7 +63,7 @@ import "../../chunk-OHPI2HRK.js";
|
|
|
64
63
|
import "../../chunk-GGWZFCYS.js";
|
|
65
64
|
|
|
66
65
|
// src/components/tickets/ticket-center.tsx
|
|
67
|
-
import { useCallback as
|
|
66
|
+
import { useCallback as useCallback2, useState as useState4 } from "react";
|
|
68
67
|
import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
|
|
69
68
|
init_button();
|
|
70
69
|
import { RefreshCw } from "lucide-react";
|
|
@@ -213,7 +212,7 @@ function TicketOpenForm({
|
|
|
213
212
|
}
|
|
214
213
|
|
|
215
214
|
// src/components/tickets/ticket-row.tsx
|
|
216
|
-
import {
|
|
215
|
+
import { useEffect, useRef } from "react";
|
|
217
216
|
|
|
218
217
|
// src/components/collapsible.tsx
|
|
219
218
|
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
@@ -406,7 +405,7 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
406
405
|
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(eng.body ?? ""),
|
|
@@ -606,22 +605,14 @@ function TicketRow({
|
|
|
606
605
|
}) {
|
|
607
606
|
const optimistic = isOptimistic(ticket);
|
|
608
607
|
const rowRef = useRef(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
|
+
useEffect(() => {
|
|
609
|
+
if (!expanded || optimistic) return;
|
|
610
|
+
requestAnimationFrame(() => {
|
|
611
|
+
requestAnimationFrame(() => {
|
|
612
|
+
rowRef.current?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
613
|
+
});
|
|
623
614
|
});
|
|
624
|
-
}, [
|
|
615
|
+
}, [expanded, optimistic]);
|
|
625
616
|
const tileData = {
|
|
626
617
|
id: ticket.id,
|
|
627
618
|
title: ticket.subject ?? "(untitled)",
|
|
@@ -642,7 +633,7 @@ 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__ */ jsx4("div", { ref: rowRef, className: "scroll-mt-
|
|
636
|
+
return /* @__PURE__ */ jsx4("div", { ref: rowRef, className: "scroll-mt-4", children: /* @__PURE__ */ jsxs3(
|
|
646
637
|
Collapsible,
|
|
647
638
|
{
|
|
648
639
|
open: expanded && !optimistic,
|
|
@@ -652,7 +643,7 @@ function TicketRow({
|
|
|
652
643
|
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
|
}
|
|
@@ -767,7 +758,7 @@ function useTicketsList(filters) {
|
|
|
767
758
|
}
|
|
768
759
|
|
|
769
760
|
// src/components/tickets/hooks/use-ticket-actions.ts
|
|
770
|
-
import { useCallback as
|
|
761
|
+
import { useCallback, useEffect as useEffect2, useMemo, useRef as useRef2, useState as useState3 } from "react";
|
|
771
762
|
import { useQueryClient } from "@tanstack/react-query";
|
|
772
763
|
var TICKET_ACTION_ENDPOINT = "/api/chat/agent/ticket-action";
|
|
773
764
|
var MIRROR_SYNC_BACKOFF_MS = [3e3, 6e3, 12e3];
|
|
@@ -778,14 +769,14 @@ function useTicketActions(options) {
|
|
|
778
769
|
const [isSubmittingForm, setIsSubmittingForm] = useState3(false);
|
|
779
770
|
const busyRowsRef = useRef2(/* @__PURE__ */ new Set());
|
|
780
771
|
const [busyRows, setBusyRows] = useState3(() => /* @__PURE__ */ new Set());
|
|
781
|
-
const setRowBusy =
|
|
772
|
+
const setRowBusy = useCallback((id, busy) => {
|
|
782
773
|
if (busy) busyRowsRef.current.add(id);
|
|
783
774
|
else busyRowsRef.current.delete(id);
|
|
784
775
|
setBusyRows(new Set(busyRowsRef.current));
|
|
785
776
|
}, []);
|
|
786
|
-
const isRowBusy =
|
|
777
|
+
const isRowBusy = useCallback((id) => busyRows.has(id), [busyRows]);
|
|
787
778
|
const watcherControllersRef = useRef2(/* @__PURE__ */ new Map());
|
|
788
|
-
|
|
779
|
+
useEffect2(() => {
|
|
789
780
|
return () => {
|
|
790
781
|
for (const controller of watcherControllersRef.current.values()) {
|
|
791
782
|
controller.abort();
|
|
@@ -794,12 +785,12 @@ function useTicketActions(options) {
|
|
|
794
785
|
};
|
|
795
786
|
}, []);
|
|
796
787
|
const queueRef = useRef2(Promise.resolve());
|
|
797
|
-
const enqueue =
|
|
788
|
+
const enqueue = useCallback((work) => {
|
|
798
789
|
const next = queueRef.current.then(work, work);
|
|
799
790
|
queueRef.current = next.catch(() => void 0);
|
|
800
791
|
return next;
|
|
801
792
|
}, []);
|
|
802
|
-
const executeTicketAction =
|
|
793
|
+
const executeTicketAction = useCallback(
|
|
803
794
|
async (toolName, args) => {
|
|
804
795
|
const res = await embedAuthedFetch(TICKET_ACTION_ENDPOINT, {
|
|
805
796
|
method: "POST",
|
|
@@ -815,7 +806,7 @@ function useTicketActions(options) {
|
|
|
815
806
|
},
|
|
816
807
|
[]
|
|
817
808
|
);
|
|
818
|
-
const watchMirrorSync =
|
|
809
|
+
const watchMirrorSync = useCallback(
|
|
819
810
|
(placeholderId, expectedTicketId) => {
|
|
820
811
|
const prior = watcherControllersRef.current.get(placeholderId);
|
|
821
812
|
if (prior) prior.abort();
|
|
@@ -861,7 +852,7 @@ function useTicketActions(options) {
|
|
|
861
852
|
},
|
|
862
853
|
[queryClient, removeOptimistic, toast2]
|
|
863
854
|
);
|
|
864
|
-
const surfaceError =
|
|
855
|
+
const surfaceError = useCallback(
|
|
865
856
|
(err, action) => {
|
|
866
857
|
const mapped = mapTicketActionError(err);
|
|
867
858
|
if (mapped.supportSystemDown) onSupportSystemDown();
|
|
@@ -874,7 +865,7 @@ function useTicketActions(options) {
|
|
|
874
865
|
},
|
|
875
866
|
[toast2, onSupportSystemDown]
|
|
876
867
|
);
|
|
877
|
-
const submitTicket =
|
|
868
|
+
const submitTicket = useCallback(
|
|
878
869
|
async (input) => {
|
|
879
870
|
if (formInFlightRef.current) return false;
|
|
880
871
|
formInFlightRef.current = true;
|
|
@@ -939,7 +930,7 @@ function useTicketActions(options) {
|
|
|
939
930
|
surfaceError
|
|
940
931
|
]
|
|
941
932
|
);
|
|
942
|
-
const updateTicket =
|
|
933
|
+
const updateTicket = useCallback(
|
|
943
934
|
async (ticket, serverArgs, successCopy, action) => {
|
|
944
935
|
if (busyRowsRef.current.has(ticket.id)) return false;
|
|
945
936
|
setRowBusy(ticket.id, true);
|
|
@@ -972,7 +963,7 @@ function useTicketActions(options) {
|
|
|
972
963
|
// and cascade-recreate addNote/closeTicket/etc.
|
|
973
964
|
[setRowBusy, enqueue, executeTicketAction, queryClient, toast2, surfaceError, removeTicketFromCache]
|
|
974
965
|
);
|
|
975
|
-
const sendMessage =
|
|
966
|
+
const sendMessage = useCallback(
|
|
976
967
|
(ticket, text, attachments) => {
|
|
977
968
|
const trimmed = text.trim();
|
|
978
969
|
const hasText = trimmed.length > 0;
|
|
@@ -990,7 +981,7 @@ function useTicketActions(options) {
|
|
|
990
981
|
},
|
|
991
982
|
[updateTicket]
|
|
992
983
|
);
|
|
993
|
-
const closeTicket =
|
|
984
|
+
const closeTicket = useCallback(
|
|
994
985
|
(ticket, resolution) => updateTicket(
|
|
995
986
|
ticket,
|
|
996
987
|
{
|
|
@@ -1002,7 +993,7 @@ function useTicketActions(options) {
|
|
|
1002
993
|
),
|
|
1003
994
|
[updateTicket]
|
|
1004
995
|
);
|
|
1005
|
-
const reopenTicket =
|
|
996
|
+
const reopenTicket = useCallback(
|
|
1006
997
|
(ticket) => updateTicket(ticket, { status: "OPEN" }, TOAST_COPY.reopen_success, "reopen ticket"),
|
|
1007
998
|
[updateTicket]
|
|
1008
999
|
);
|
|
@@ -1149,14 +1140,14 @@ function TicketCenterAuthed({
|
|
|
1149
1140
|
const [optimisticTickets, setOptimisticTickets] = useState4([]);
|
|
1150
1141
|
const [expandedTicketId, setExpandedTicketId] = useState4(null);
|
|
1151
1142
|
const [supportSystemDown, setSupportSystemDown] = useState4(false);
|
|
1152
|
-
const prependOptimistic =
|
|
1143
|
+
const prependOptimistic = useCallback2((placeholder) => {
|
|
1153
1144
|
setOptimisticTickets((prev) => [placeholder, ...prev]);
|
|
1154
1145
|
}, []);
|
|
1155
|
-
const removeOptimistic =
|
|
1146
|
+
const removeOptimistic = useCallback2((placeholderId) => {
|
|
1156
1147
|
setOptimisticTickets((prev) => prev.filter((t) => t.id !== placeholderId));
|
|
1157
1148
|
setExpandedTicketId((prev) => prev === placeholderId ? null : prev);
|
|
1158
1149
|
}, []);
|
|
1159
|
-
const removeTicketFromCache =
|
|
1150
|
+
const removeTicketFromCache = useCallback2(
|
|
1160
1151
|
(ticketId) => {
|
|
1161
1152
|
queryClient.setQueriesData(
|
|
1162
1153
|
{ queryKey: ["tickets"] },
|
|
@@ -1173,7 +1164,7 @@ function TicketCenterAuthed({
|
|
|
1173
1164
|
toast: toast2,
|
|
1174
1165
|
onSupportSystemDown: () => setSupportSystemDown(true)
|
|
1175
1166
|
});
|
|
1176
|
-
const toggleRow =
|
|
1167
|
+
const toggleRow = useCallback2((id) => {
|
|
1177
1168
|
setExpandedTicketId((prev) => prev === id ? null : id);
|
|
1178
1169
|
}, []);
|
|
1179
1170
|
const merged = [...optimisticTickets, ...tickets];
|
|
@@ -1256,14 +1247,12 @@ function TicketListSkeleton() {
|
|
|
1256
1247
|
}
|
|
1257
1248
|
|
|
1258
1249
|
// src/components/tickets/help-center-list.tsx
|
|
1259
|
-
import { useCallback as
|
|
1250
|
+
import { useCallback as useCallback3, useState as useState6 } from "react";
|
|
1260
1251
|
import { useQueryClient as useQueryClient3 } from "@tanstack/react-query";
|
|
1261
1252
|
init_unified_pagination();
|
|
1262
1253
|
|
|
1263
1254
|
// src/components/tickets/help-center-card.tsx
|
|
1264
|
-
import { useCallback as useCallback4, useRef as useRef3 } from "react";
|
|
1265
1255
|
import { Fragment, jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1266
|
-
var STICKY_HEADER_OFFSET_PX = 96;
|
|
1267
1256
|
function HelpCenterCard({
|
|
1268
1257
|
ticket,
|
|
1269
1258
|
expanded,
|
|
@@ -1284,24 +1273,6 @@ function HelpCenterCard({
|
|
|
1284
1273
|
const description = ticket.preview ?? ticket.body ?? "";
|
|
1285
1274
|
const isExpandable = !optimistic;
|
|
1286
1275
|
const isExpanded = expanded && isExpandable;
|
|
1287
|
-
const rowRef = useRef3(null);
|
|
1288
|
-
const handleClick = useCallback4(() => {
|
|
1289
|
-
onToggle(ticket.id);
|
|
1290
|
-
scrollElementIntoView(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__ */ jsxs5(Fragment, { children: [
|
|
1306
1277
|
/* @__PURE__ */ jsx6(
|
|
1307
1278
|
StatusBadge,
|
|
@@ -1325,8 +1296,6 @@ function HelpCenterCard({
|
|
|
1325
1296
|
return /* @__PURE__ */ jsxs5(
|
|
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,7 +1303,7 @@ 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,
|
|
@@ -1549,14 +1518,14 @@ function HelpCenterListAuthed({
|
|
|
1549
1518
|
const [optimisticTickets, setOptimisticTickets] = useState6([]);
|
|
1550
1519
|
const [expandedTicketId, setExpandedTicketId] = useState6(null);
|
|
1551
1520
|
const [supportSystemDown, setSupportSystemDown] = useState6(false);
|
|
1552
|
-
const prependOptimistic =
|
|
1521
|
+
const prependOptimistic = useCallback3((placeholder) => {
|
|
1553
1522
|
setOptimisticTickets((prev) => [placeholder, ...prev]);
|
|
1554
1523
|
}, []);
|
|
1555
|
-
const removeOptimistic =
|
|
1524
|
+
const removeOptimistic = useCallback3((placeholderId) => {
|
|
1556
1525
|
setOptimisticTickets((prev) => prev.filter((t) => t.id !== placeholderId));
|
|
1557
1526
|
setExpandedTicketId((prev) => prev === placeholderId ? null : prev);
|
|
1558
1527
|
}, []);
|
|
1559
|
-
const removeTicketFromCache =
|
|
1528
|
+
const removeTicketFromCache = useCallback3(
|
|
1560
1529
|
(ticketId) => {
|
|
1561
1530
|
queryClient.setQueriesData(
|
|
1562
1531
|
{ queryKey: ["tickets"] },
|
|
@@ -1573,7 +1542,7 @@ function HelpCenterListAuthed({
|
|
|
1573
1542
|
toast: toast2,
|
|
1574
1543
|
onSupportSystemDown: () => setSupportSystemDown(true)
|
|
1575
1544
|
});
|
|
1576
|
-
const toggleRow =
|
|
1545
|
+
const toggleRow = useCallback3((id) => {
|
|
1577
1546
|
setExpandedTicketId((prev) => prev === id ? null : id);
|
|
1578
1547
|
}, []);
|
|
1579
1548
|
const merged = [...optimisticTickets, ...tickets];
|
|
@@ -1626,31 +1595,21 @@ function HelpCenterListAuthed({
|
|
|
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
|
-
busy: isOptimistic(ticket) ? false : actions.isRowBusy(ticket.id),
|
|
1645
|
-
supportSystemDown,
|
|
1646
|
-
onSendMessage: actions.sendMessage,
|
|
1647
|
-
onClose: actions.closeTicket,
|
|
1648
|
-
onReopen: actions.reopenTicket,
|
|
1649
|
-
onActionCollapsed: () => setExpandedTicketId(null)
|
|
1650
|
-
},
|
|
1651
|
-
ticket.id
|
|
1652
|
-
)) })
|
|
1653
|
-
) }),
|
|
1598
|
+
) : /* @__PURE__ */ jsx8("div", { className: "bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full", children: merged.map((ticket) => /* @__PURE__ */ jsx8(
|
|
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
|
+
)) }) }),
|
|
1654
1613
|
!error && totalPages > 1 && /* @__PURE__ */ jsx8(UnifiedPagination, { currentPage: page, totalPages })
|
|
1655
1614
|
] });
|
|
1656
1615
|
return /* @__PURE__ */ jsx8(DevSectionPage, { sectionKey: "tickets", preControls: form, children: body });
|