@ttt-productions/chat-react 0.2.5 → 0.2.6
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/firestore/queries.d.ts +0 -2
- package/dist/firestore/queries.d.ts.map +1 -1
- package/dist/firestore/queries.js +0 -5
- package/dist/firestore/queries.js.map +1 -1
- package/dist/hooks/useChatMessages.d.ts.map +1 -1
- package/dist/hooks/useChatMessages.js +24 -73
- package/dist/hooks/useChatMessages.js.map +1 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -2
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type { Firestore, Query, DocumentData } from "firebase/firestore";
|
|
2
1
|
export declare function threadDocPath(chatCollectionPath: string | string[], threadId: string): string[];
|
|
3
2
|
export declare function messagesColPath(chatCollectionPath: string | string[], threadId: string, messagesSubcollection?: string): [string, string, ...string[]];
|
|
4
|
-
export declare function newestWindowQuery(db: Firestore, chatCollectionPath: string | string[], threadId: string, createdAtField: string, pageSize: number, messagesSubcollection?: string): Query<DocumentData>;
|
|
5
3
|
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/firestore/queries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/firestore/queries.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/F;AAED,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,GAAG,MAAM,EAAE,EACrC,QAAQ,EAAE,MAAM,EAChB,qBAAqB,SAAa,GACjC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAG/B"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { collection, query, orderBy, limit } from "firebase/firestore";
|
|
2
1
|
function normalizeSegments(path) {
|
|
3
2
|
return Array.isArray(path) ? path : [path];
|
|
4
3
|
}
|
|
@@ -9,8 +8,4 @@ export function messagesColPath(chatCollectionPath, threadId, messagesSubcollect
|
|
|
9
8
|
const segments = [...normalizeSegments(chatCollectionPath), threadId, messagesSubcollection];
|
|
10
9
|
return segments;
|
|
11
10
|
}
|
|
12
|
-
export function newestWindowQuery(db, chatCollectionPath, threadId, createdAtField, pageSize, messagesSubcollection = "messages") {
|
|
13
|
-
const path = messagesColPath(chatCollectionPath, threadId, messagesSubcollection);
|
|
14
|
-
return query(collection(db, path[0], ...path.slice(1)), orderBy(createdAtField, "desc"), limit(pageSize));
|
|
15
|
-
}
|
|
16
11
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/firestore/queries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/firestore/queries.ts"],"names":[],"mappings":"AAAA,SAAS,iBAAiB,CAAC,IAAuB;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,kBAAqC,EAAE,QAAgB;IACnF,OAAO,CAAC,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,kBAAqC,EACrC,QAAgB,EAChB,qBAAqB,GAAG,UAAU;IAElC,MAAM,QAAQ,GAAG,CAAC,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAC7F,OAAO,QAAyC,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatMessages.d.ts","sourceRoot":"","sources":["../../src/hooks/useChatMessages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useChatMessages.d.ts","sourceRoot":"","sources":["../../src/hooks/useChatMessages.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAsCF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAuF7E"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { collection, getDocs, onSnapshot, orderBy, query, startAfter, limit, } from "firebase/firestore";
|
|
4
|
-
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
5
3
|
import { toMillis } from "@ttt-productions/firebase-helpers";
|
|
4
|
+
import { useFirestoreLiveInfinite } from "@ttt-productions/query-core/react";
|
|
6
5
|
import { canAccessThread } from "./useChatThreadAccess.js";
|
|
7
|
-
import { messagesColPath
|
|
6
|
+
import { messagesColPath } from "../firestore/queries.js";
|
|
8
7
|
import { useOptionalChatNameResolver } from "../context/ChatNameResolverContext.js";
|
|
9
8
|
// Safety limit to prevent memory exhaustion
|
|
10
9
|
const MAX_PAGE_SIZE = 100;
|
|
11
|
-
function mapMsg(
|
|
12
|
-
const d =
|
|
10
|
+
function mapMsg(data, threadId) {
|
|
11
|
+
const d = data;
|
|
13
12
|
const createdAt = toMillis(d.createdAt);
|
|
14
13
|
if (!createdAt) {
|
|
15
|
-
console.error('[useChatMessages] Message missing valid createdAt:',
|
|
14
|
+
console.error('[useChatMessages] Message missing valid createdAt:', data.id, d.createdAt);
|
|
16
15
|
}
|
|
17
16
|
// replyTo: the new shape uses senderId, not senderUsername. Tolerate older
|
|
18
17
|
// docs that still have senderUsername — drop the name and keep what we can.
|
|
@@ -24,7 +23,7 @@ function mapMsg(doc, threadId) {
|
|
|
24
23
|
}
|
|
25
24
|
: undefined;
|
|
26
25
|
return {
|
|
27
|
-
messageId:
|
|
26
|
+
messageId: data.id,
|
|
28
27
|
threadId,
|
|
29
28
|
createdAt: createdAt || 0,
|
|
30
29
|
senderId: d.senderId,
|
|
@@ -36,81 +35,33 @@ function mapMsg(doc, threadId) {
|
|
|
36
35
|
meta: d.meta,
|
|
37
36
|
};
|
|
38
37
|
}
|
|
39
|
-
function dedupeAndSortAsc(all) {
|
|
40
|
-
const m = new Map();
|
|
41
|
-
for (const x of all)
|
|
42
|
-
m.set(x.messageId, x);
|
|
43
|
-
return Array.from(m.values()).sort((a, b) => a.createdAt - b.createdAt);
|
|
44
|
-
}
|
|
45
|
-
function messagesCol(db, chatCollectionPath, threadId, messagesSubcollection) {
|
|
46
|
-
const path = messagesColPath(chatCollectionPath, threadId, messagesSubcollection);
|
|
47
|
-
return collection(db, path[0], ...path.slice(1));
|
|
48
|
-
}
|
|
49
38
|
export function useChatMessages(config) {
|
|
50
|
-
const {
|
|
39
|
+
const { chatCollectionPath, messagesSubcollection = "messages", threadId, pageSize: requestedPageSize = 20, currentUserId, isAdmin, accessMode, threadAllowedUserIds, createdAtField = "createdAt", } = config;
|
|
51
40
|
const pageSize = Math.min(requestedPageSize, MAX_PAGE_SIZE);
|
|
52
41
|
if (requestedPageSize > MAX_PAGE_SIZE) {
|
|
53
42
|
console.warn(`[useChatMessages] Requested pageSize ${requestedPageSize} exceeds maximum ${MAX_PAGE_SIZE}. Using ${MAX_PAGE_SIZE}.`);
|
|
54
43
|
}
|
|
55
|
-
const pathKey = JSON.stringify(Array.isArray(chatCollectionPath) ? chatCollectionPath : [chatCollectionPath]);
|
|
56
44
|
const allowed = React.useMemo(() => canAccessThread({
|
|
57
45
|
accessMode,
|
|
58
46
|
isAdmin,
|
|
59
47
|
currentUserId,
|
|
60
48
|
allowedUserIds: threadAllowedUserIds,
|
|
61
49
|
}), [accessMode, isAdmin, currentUserId, threadAllowedUserIds]);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
ready: true,
|
|
76
|
-
newestDesc: mapped,
|
|
77
|
-
oldestDocInWindow: docs[docs.length - 1] ?? null,
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
return () => unsub();
|
|
81
|
-
}, [allowed, db, chatCollectionPath, pathKey, threadId, createdAtField, pageSize, messagesSubcollection]);
|
|
82
|
-
const older = useInfiniteQuery({
|
|
83
|
-
queryKey: ["chat-core", "older", pathKey, threadId, messagesSubcollection, pageSize],
|
|
84
|
-
enabled: allowed && newest.ready,
|
|
85
|
-
initialPageParam: undefined,
|
|
86
|
-
queryFn: async ({ pageParam }) => {
|
|
87
|
-
const baseCol = messagesCol(db, chatCollectionPath, threadId, messagesSubcollection);
|
|
88
|
-
const cursor = pageParam ?? (newest.oldestDocInWindow ?? undefined);
|
|
89
|
-
if (!cursor) {
|
|
90
|
-
return {
|
|
91
|
-
itemsDesc: [],
|
|
92
|
-
nextCursor: undefined,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
const q = query(baseCol, orderBy(createdAtField, "desc"), startAfter(cursor), limit(pageSize));
|
|
96
|
-
const snap = await getDocs(q);
|
|
97
|
-
const docs = snap.docs;
|
|
98
|
-
const itemsDesc = docs.map((d) => mapMsg(d, threadId));
|
|
99
|
-
const nextCursor = docs.length === pageSize ? docs[docs.length - 1] : undefined;
|
|
100
|
-
return { itemsDesc, nextCursor };
|
|
101
|
-
},
|
|
102
|
-
getNextPageParam: (last) => last.nextCursor,
|
|
50
|
+
// Stable key segment for the message collection path (string | string[]).
|
|
51
|
+
const pathKey = React.useMemo(() => JSON.stringify(Array.isArray(chatCollectionPath) ? chatCollectionPath : [chatCollectionPath]), [chatCollectionPath]);
|
|
52
|
+
// Slash-joined collection path for the generic hook (handles nested paths).
|
|
53
|
+
const collectionPath = React.useMemo(() => messagesColPath(chatCollectionPath, threadId, messagesSubcollection).join("/"), [chatCollectionPath, threadId, messagesSubcollection]);
|
|
54
|
+
const { items, isInitialLoading, fetchOlder, hasOlder, isFetchingOlder } = useFirestoreLiveInfinite({
|
|
55
|
+
collectionPath,
|
|
56
|
+
queryKey: ["chat-core", "messages", pathKey, threadId, messagesSubcollection, pageSize],
|
|
57
|
+
orderByField: createdAtField,
|
|
58
|
+
pageSize,
|
|
59
|
+
enabled: allowed,
|
|
60
|
+
sort: "asc",
|
|
61
|
+
select: (data) => mapMsg(data, threadId),
|
|
62
|
+
getSortValue: (data) => toMillis(data.createdAt) ?? 0,
|
|
103
63
|
});
|
|
104
|
-
const
|
|
105
|
-
const fetchOlder = React.useCallback(async () => {
|
|
106
|
-
await fetchOlderPage();
|
|
107
|
-
}, [fetchOlderPage]);
|
|
108
|
-
const messages = React.useMemo(() => {
|
|
109
|
-
if (!allowed)
|
|
110
|
-
return [];
|
|
111
|
-
const olderDesc = (older.data?.pages ?? []).flatMap((p) => p.itemsDesc);
|
|
112
|
-
return dedupeAndSortAsc([...olderDesc, ...newest.newestDesc]);
|
|
113
|
-
}, [allowed, older.data, newest.newestDesc]);
|
|
64
|
+
const messages = React.useMemo(() => (allowed ? items : []), [allowed, items]);
|
|
114
65
|
// Pre-warm name cache for all visible senders (and reply-to senders).
|
|
115
66
|
// Optional resolver: silent no-op if no provider is wrapped.
|
|
116
67
|
const resolverCtx = useOptionalChatNameResolver();
|
|
@@ -130,11 +81,11 @@ export function useChatMessages(config) {
|
|
|
130
81
|
}, [resolverCtx, senderIds]);
|
|
131
82
|
return {
|
|
132
83
|
allowed,
|
|
133
|
-
isInitialLoading: allowed ?
|
|
84
|
+
isInitialLoading: allowed ? isInitialLoading : false,
|
|
134
85
|
messages,
|
|
135
86
|
fetchOlder,
|
|
136
|
-
hasOlder
|
|
137
|
-
isFetchingOlder
|
|
87
|
+
hasOlder,
|
|
88
|
+
isFetchingOlder,
|
|
138
89
|
};
|
|
139
90
|
}
|
|
140
91
|
//# sourceMappingURL=useChatMessages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatMessages.js","sourceRoot":"","sources":["../../src/hooks/useChatMessages.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useChatMessages.js","sourceRoot":"","sources":["../../src/hooks/useChatMessages.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAEpF,4CAA4C;AAC5C,MAAM,aAAa,GAAG,GAAG,CAAC;AAW1B,SAAS,MAAM,CACb,IAAmC,EACnC,QAAgB;IAEhB,MAAM,CAAC,GAAG,IAAW,CAAC;IAEtB,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5F,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO;QACvB,CAAC,CAAC;YACE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;YAC9B,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;YAClC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc;SACzC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,EAAE;QAClB,QAAQ;QACR,SAAS,EAAE,SAAS,IAAI,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS;QACrC,OAAO;QACP,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,SAAS;QAC/C,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,EACJ,kBAAkB,EAClB,qBAAqB,GAAG,UAAU,EAClC,QAAQ,EACR,QAAQ,EAAE,iBAAiB,GAAG,EAAE,EAChC,aAAa,EACb,OAAO,EACP,UAAU,EACV,oBAAoB,EACpB,cAAc,GAAG,WAAW,GAC7B,GAAG,MAAM,CAAC;IAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IAE5D,IAAI,iBAAiB,GAAG,aAAa,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CACV,wCAAwC,iBAAiB,oBAAoB,aAAa,WAAW,aAAa,GAAG,CACtH,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAC3B,GAAG,EAAE,CACH,eAAe,CAAC;QACd,UAAU;QACV,OAAO;QACP,aAAa;QACb,cAAc,EAAE,oBAAoB;KACrC,CAAC,EACJ,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAC3D,CAAC;IAEF,0EAA0E;IAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAC3B,GAAG,EAAE,CACH,IAAI,CAAC,SAAS,CACZ,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAC9E,EACH,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,4EAA4E;IAC5E,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,eAAe,CAAC,kBAAkB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACpF,CAAC,kBAAkB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CACtD,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,GACtE,wBAAwB,CAAgB;QACtC,cAAc;QACd,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,CAAC;QACvF,YAAY,EAAE,cAAc;QAC5B,QAAQ;QACR,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;QACxC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KACtD,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/E,sEAAsE;IACtE,6DAA6D;IAC7D,MAAM,WAAW,GAAG,2BAA2B,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,WAAW,EAAE,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,OAAO;QACL,OAAO;QACP,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK;QACpD,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Firestore } from "firebase/firestore";
|
|
2
1
|
import type { FirebaseStorage } from "firebase/storage";
|
|
3
2
|
import type { ReactNode } from "react";
|
|
4
3
|
import type { MediaOriginSpec } from "@ttt-productions/media-schemas";
|
|
@@ -88,7 +87,6 @@ export type ChatMentionConfig = {
|
|
|
88
87
|
renderMention?: (ref: MentionRef) => ReactNode;
|
|
89
88
|
};
|
|
90
89
|
export type ChatCoreConfig = {
|
|
91
|
-
db: Firestore;
|
|
92
90
|
chatCollectionPath: string | string[];
|
|
93
91
|
messagesSubcollection?: string;
|
|
94
92
|
threadId: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ttt-productions/chat-react",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Chat React UI, hooks, and Firebase-client adapter for TTT Productions apps (realtime newest window + infinite older pagination)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"@tanstack/react-query": ">=5.0.0",
|
|
36
|
+
"@ttt-productions/query-core": "^0.8.6",
|
|
36
37
|
"firebase": ">=10.0.0",
|
|
37
38
|
"lucide-react": ">=0.0.0",
|
|
38
39
|
"react": ">=19.0.0",
|
|
@@ -42,6 +43,9 @@
|
|
|
42
43
|
"@tanstack/react-query": {
|
|
43
44
|
"optional": true
|
|
44
45
|
},
|
|
46
|
+
"@ttt-productions/query-core": {
|
|
47
|
+
"optional": true
|
|
48
|
+
},
|
|
45
49
|
"firebase": {
|
|
46
50
|
"optional": true
|
|
47
51
|
},
|
|
@@ -63,10 +67,11 @@
|
|
|
63
67
|
"@ttt-productions/file-input": "^0.5.4",
|
|
64
68
|
"@ttt-productions/upload-ui": "^0.3.4",
|
|
65
69
|
"@ttt-productions/media-viewer": "^0.4.5",
|
|
66
|
-
"@ttt-productions/mobile-core": "^0.4.
|
|
70
|
+
"@ttt-productions/mobile-core": "^0.4.4",
|
|
67
71
|
"@ttt-productions/firebase-helpers": "^0.6.3"
|
|
68
72
|
},
|
|
69
73
|
"devDependencies": {
|
|
74
|
+
"@ttt-productions/query-core": "^0.8.6",
|
|
70
75
|
"@types/react": "^19.0.0",
|
|
71
76
|
"@types/react-dom": "^19.0.0",
|
|
72
77
|
"react": "^19.0.0",
|