@ttt-productions/chat-react 0.2.4 → 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 +15 -10
|
@@ -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":"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"}
|
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
|
},
|
|
@@ -56,17 +60,18 @@
|
|
|
56
60
|
}
|
|
57
61
|
},
|
|
58
62
|
"dependencies": {
|
|
59
|
-
"@ttt-productions/chat-core": "0.6.
|
|
60
|
-
"@ttt-productions/chat-schemas": "0.4.
|
|
61
|
-
"@ttt-productions/media-schemas": "0.6.
|
|
62
|
-
"@ttt-productions/ui-core": "0.6.
|
|
63
|
-
"@ttt-productions/file-input": "0.5.
|
|
64
|
-
"@ttt-productions/upload-ui": "0.3.
|
|
65
|
-
"@ttt-productions/media-viewer": "0.4.
|
|
66
|
-
"@ttt-productions/mobile-core": "0.4.
|
|
67
|
-
"@ttt-productions/firebase-helpers": "0.6.
|
|
63
|
+
"@ttt-productions/chat-core": "^0.6.5",
|
|
64
|
+
"@ttt-productions/chat-schemas": "^0.4.3",
|
|
65
|
+
"@ttt-productions/media-schemas": "^0.6.3",
|
|
66
|
+
"@ttt-productions/ui-core": "^0.6.4",
|
|
67
|
+
"@ttt-productions/file-input": "^0.5.4",
|
|
68
|
+
"@ttt-productions/upload-ui": "^0.3.4",
|
|
69
|
+
"@ttt-productions/media-viewer": "^0.4.5",
|
|
70
|
+
"@ttt-productions/mobile-core": "^0.4.4",
|
|
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",
|