@sublay/core 7.1.1 → 7.2.0
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/cjs/hooks/auth/index.d.ts +2 -0
- package/dist/cjs/hooks/auth/index.js +5 -1
- package/dist/cjs/hooks/auth/index.js.map +1 -1
- package/dist/cjs/hooks/auth/useConfirmAccountDeletion.d.ts +14 -0
- package/dist/cjs/hooks/auth/useConfirmAccountDeletion.js +36 -0
- package/dist/cjs/hooks/auth/useConfirmAccountDeletion.js.map +1 -0
- package/dist/cjs/hooks/auth/useRequestAccountDeletion.d.ts +13 -0
- package/dist/cjs/hooks/auth/useRequestAccountDeletion.js +30 -0
- package/dist/cjs/hooks/auth/useRequestAccountDeletion.js.map +1 -0
- package/dist/cjs/hooks/chat/index.d.ts +2 -2
- package/dist/cjs/hooks/chat/index.js +4 -1
- package/dist/cjs/hooks/chat/index.js.map +1 -1
- package/dist/cjs/hooks/chat/messages/index.d.ts +6 -0
- package/dist/cjs/hooks/chat/messages/index.js +10 -1
- package/dist/cjs/hooks/chat/messages/index.js.map +1 -1
- package/dist/cjs/hooks/chat/messages/useChatMessages.d.ts +10 -14
- package/dist/cjs/hooks/chat/messages/useChatMessages.js +7 -136
- package/dist/cjs/hooks/chat/messages/useChatMessages.js.map +1 -1
- package/dist/cjs/hooks/chat/messages/useFetchManyChatMessages.d.ts +45 -0
- package/dist/cjs/hooks/chat/messages/useFetchManyChatMessages.js +43 -0
- package/dist/cjs/hooks/chat/messages/useFetchManyChatMessages.js.map +1 -0
- package/dist/cjs/hooks/chat/messages/useFetchManyChatMessagesWrapper.d.ts +35 -0
- package/dist/cjs/hooks/chat/messages/useFetchManyChatMessagesWrapper.js +100 -0
- package/dist/cjs/hooks/chat/messages/useFetchManyChatMessagesWrapper.js.map +1 -0
- package/dist/cjs/hooks/chat/messages/useLiveChatMessages.d.ts +26 -0
- package/dist/cjs/hooks/chat/messages/useLiveChatMessages.js +149 -0
- package/dist/cjs/hooks/chat/messages/useLiveChatMessages.js.map +1 -0
- package/dist/cjs/hooks/chat/messages/useMessageThread.js +2 -2
- package/dist/cjs/hooks/chat/messages/useMessageThread.js.map +1 -1
- package/dist/cjs/hooks/chat/useConversationData.js +2 -2
- package/dist/cjs/hooks/chat/useConversationData.js.map +1 -1
- package/dist/cjs/hooks/spaces/index.d.ts +2 -0
- package/dist/cjs/hooks/spaces/index.js +3 -1
- package/dist/cjs/hooks/spaces/index.js.map +1 -1
- package/dist/cjs/hooks/spaces/useFetchMutualSpaces.d.ts +11 -0
- package/dist/cjs/hooks/spaces/useFetchMutualSpaces.js +28 -0
- package/dist/cjs/hooks/spaces/useFetchMutualSpaces.js.map +1 -0
- package/dist/cjs/hooks/tables/index.d.ts +2 -0
- package/dist/cjs/hooks/tables/index.js +10 -0
- package/dist/cjs/hooks/tables/index.js.map +1 -0
- package/dist/cjs/hooks/tables/useTable.d.ts +37 -0
- package/dist/cjs/hooks/tables/useTable.js +115 -0
- package/dist/cjs/hooks/tables/useTable.js.map +1 -0
- package/dist/cjs/index.d.ts +6 -4
- package/dist/cjs/index.js +14 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces/models/Table.d.ts +29 -0
- package/dist/cjs/interfaces/models/Table.js +8 -0
- package/dist/cjs/interfaces/models/Table.js.map +1 -0
- package/dist/cjs/store/api/appNotificationsApi.d.ts +181 -181
- package/dist/cjs/store/api/baseApi.d.ts +2 -2
- package/dist/cjs/store/api/baseApi.js +1 -0
- package/dist/cjs/store/api/baseApi.js.map +1 -1
- package/dist/cjs/store/api/collectionsApi.d.ts +319 -319
- package/dist/cjs/store/api/entityListsApi.d.ts +107 -107
- package/dist/cjs/store/api/index.d.ts +1 -0
- package/dist/cjs/store/api/index.js +2 -0
- package/dist/cjs/store/api/index.js.map +1 -1
- package/dist/cjs/store/api/spacesApi.d.ts +1021 -1021
- package/dist/cjs/store/api/tablesApi.d.ts +2554 -0
- package/dist/cjs/store/api/tablesApi.js +84 -0
- package/dist/cjs/store/api/tablesApi.js.map +1 -0
- package/dist/cjs/store/api/userApi.d.ts +3 -3
- package/dist/cjs/store/hooks.d.ts +2 -1
- package/dist/cjs/store/index.d.ts +4 -2
- package/dist/cjs/store/rootReducer.d.ts +5 -2
- package/dist/cjs/store/slices/authThunks.d.ts +4 -0
- package/dist/cjs/store/slices/authThunks.js +52 -1
- package/dist/cjs/store/slices/authThunks.js.map +1 -1
- package/dist/cjs/store/slices/tablesSlice.d.ts +113 -0
- package/dist/cjs/store/slices/tablesSlice.js +40 -0
- package/dist/cjs/store/slices/tablesSlice.js.map +1 -0
- package/dist/cjs/store/sublayReducers.d.ts +2 -0
- package/dist/cjs/store/sublayReducers.js +2 -0
- package/dist/cjs/store/sublayReducers.js.map +1 -1
- package/dist/esm/hooks/auth/index.d.ts +2 -0
- package/dist/esm/hooks/auth/index.js +2 -0
- package/dist/esm/hooks/auth/index.js.map +1 -1
- package/dist/esm/hooks/auth/useConfirmAccountDeletion.d.ts +14 -0
- package/dist/esm/hooks/auth/useConfirmAccountDeletion.js +31 -0
- package/dist/esm/hooks/auth/useConfirmAccountDeletion.js.map +1 -0
- package/dist/esm/hooks/auth/useRequestAccountDeletion.d.ts +13 -0
- package/dist/esm/hooks/auth/useRequestAccountDeletion.js +25 -0
- package/dist/esm/hooks/auth/useRequestAccountDeletion.js.map +1 -0
- package/dist/esm/hooks/chat/index.d.ts +2 -2
- package/dist/esm/hooks/chat/index.js +1 -1
- package/dist/esm/hooks/chat/index.js.map +1 -1
- package/dist/esm/hooks/chat/messages/index.d.ts +6 -0
- package/dist/esm/hooks/chat/messages/index.js +6 -0
- package/dist/esm/hooks/chat/messages/index.js.map +1 -1
- package/dist/esm/hooks/chat/messages/useChatMessages.d.ts +10 -14
- package/dist/esm/hooks/chat/messages/useChatMessages.js +7 -136
- package/dist/esm/hooks/chat/messages/useChatMessages.js.map +1 -1
- package/dist/esm/hooks/chat/messages/useFetchManyChatMessages.d.ts +45 -0
- package/dist/esm/hooks/chat/messages/useFetchManyChatMessages.js +38 -0
- package/dist/esm/hooks/chat/messages/useFetchManyChatMessages.js.map +1 -0
- package/dist/esm/hooks/chat/messages/useFetchManyChatMessagesWrapper.d.ts +35 -0
- package/dist/esm/hooks/chat/messages/useFetchManyChatMessagesWrapper.js +95 -0
- package/dist/esm/hooks/chat/messages/useFetchManyChatMessagesWrapper.js.map +1 -0
- package/dist/esm/hooks/chat/messages/useLiveChatMessages.d.ts +26 -0
- package/dist/esm/hooks/chat/messages/useLiveChatMessages.js +144 -0
- package/dist/esm/hooks/chat/messages/useLiveChatMessages.js.map +1 -0
- package/dist/esm/hooks/chat/messages/useMessageThread.js +2 -2
- package/dist/esm/hooks/chat/messages/useMessageThread.js.map +1 -1
- package/dist/esm/hooks/chat/useConversationData.js +2 -2
- package/dist/esm/hooks/chat/useConversationData.js.map +1 -1
- package/dist/esm/hooks/spaces/index.d.ts +2 -0
- package/dist/esm/hooks/spaces/index.js +1 -0
- package/dist/esm/hooks/spaces/index.js.map +1 -1
- package/dist/esm/hooks/spaces/useFetchMutualSpaces.d.ts +11 -0
- package/dist/esm/hooks/spaces/useFetchMutualSpaces.js +23 -0
- package/dist/esm/hooks/spaces/useFetchMutualSpaces.js.map +1 -0
- package/dist/esm/hooks/tables/index.d.ts +2 -0
- package/dist/esm/hooks/tables/index.js +2 -0
- package/dist/esm/hooks/tables/index.js.map +1 -0
- package/dist/esm/hooks/tables/useTable.d.ts +37 -0
- package/dist/esm/hooks/tables/useTable.js +109 -0
- package/dist/esm/hooks/tables/useTable.js.map +1 -0
- package/dist/esm/index.d.ts +6 -4
- package/dist/esm/index.js +5 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces/models/Table.d.ts +29 -0
- package/dist/esm/interfaces/models/Table.js +7 -0
- package/dist/esm/interfaces/models/Table.js.map +1 -0
- package/dist/esm/store/api/appNotificationsApi.d.ts +181 -181
- package/dist/esm/store/api/baseApi.d.ts +2 -2
- package/dist/esm/store/api/baseApi.js +1 -0
- package/dist/esm/store/api/baseApi.js.map +1 -1
- package/dist/esm/store/api/collectionsApi.d.ts +319 -319
- package/dist/esm/store/api/entityListsApi.d.ts +107 -107
- package/dist/esm/store/api/index.d.ts +1 -0
- package/dist/esm/store/api/index.js +2 -0
- package/dist/esm/store/api/index.js.map +1 -1
- package/dist/esm/store/api/spacesApi.d.ts +1021 -1021
- package/dist/esm/store/api/tablesApi.d.ts +2554 -0
- package/dist/esm/store/api/tablesApi.js +80 -0
- package/dist/esm/store/api/tablesApi.js.map +1 -0
- package/dist/esm/store/api/userApi.d.ts +3 -3
- package/dist/esm/store/hooks.d.ts +2 -1
- package/dist/esm/store/index.d.ts +4 -2
- package/dist/esm/store/rootReducer.d.ts +5 -2
- package/dist/esm/store/slices/authThunks.d.ts +4 -0
- package/dist/esm/store/slices/authThunks.js +51 -0
- package/dist/esm/store/slices/authThunks.js.map +1 -1
- package/dist/esm/store/slices/tablesSlice.d.ts +113 -0
- package/dist/esm/store/slices/tablesSlice.js +36 -0
- package/dist/esm/store/slices/tablesSlice.js.map +1 -0
- package/dist/esm/store/sublayReducers.d.ts +2 -0
- package/dist/esm/store/sublayReducers.js +2 -0
- package/dist/esm/store/sublayReducers.js.map +1 -1
- package/package.json +10 -3
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const handleError_1 = require("../../../utils/handleError");
|
|
8
|
+
const useFetchManyChatMessages_1 = __importDefault(require("./useFetchManyChatMessages"));
|
|
9
|
+
/**
|
|
10
|
+
* Batteries-included, self-contained list of conversation messages with
|
|
11
|
+
* cursor pagination — keeps results in local component state, NOT Redux, and
|
|
12
|
+
* does NOT subscribe to socket updates. Use this for read-only / filtered
|
|
13
|
+
* queries (e.g. "messages that have replies"). For the live canonical
|
|
14
|
+
* conversation stream, use `useLiveChatMessages` instead.
|
|
15
|
+
*/
|
|
16
|
+
function useFetchManyChatMessagesWrapper(props) {
|
|
17
|
+
const { conversationId, parentId, limit = 50, sort = "desc", includeFiles, filters, } = props;
|
|
18
|
+
const fetchMany = (0, useFetchManyChatMessages_1.default)();
|
|
19
|
+
const [messages, setMessages] = (0, react_1.useState)([]);
|
|
20
|
+
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
21
|
+
const [hasMore, setHasMore] = (0, react_1.useState)(true);
|
|
22
|
+
// Cursor for the next page, in the direction of travel: the oldest loaded
|
|
23
|
+
// timestamp for "desc", the newest for "asc".
|
|
24
|
+
const cursorRef = (0, react_1.useRef)(null);
|
|
25
|
+
const loadingRef = (0, react_1.useRef)(false);
|
|
26
|
+
const hasMoreRef = (0, react_1.useRef)(true);
|
|
27
|
+
// Stable primitive for dependency arrays — `filters` is a fresh object each
|
|
28
|
+
// render unless the caller memoizes it.
|
|
29
|
+
const filtersKey = JSON.stringify(filters ?? {});
|
|
30
|
+
const advanceCursor = (0, react_1.useCallback)((res) => {
|
|
31
|
+
cursorRef.current = sort === "asc" ? res.newestCreatedAt : res.oldestCreatedAt;
|
|
32
|
+
}, [sort]);
|
|
33
|
+
const refetch = (0, react_1.useCallback)(async () => {
|
|
34
|
+
if (!conversationId)
|
|
35
|
+
return;
|
|
36
|
+
loadingRef.current = true;
|
|
37
|
+
setLoading(true);
|
|
38
|
+
hasMoreRef.current = true;
|
|
39
|
+
setHasMore(true);
|
|
40
|
+
try {
|
|
41
|
+
const res = await fetchMany({
|
|
42
|
+
conversationId,
|
|
43
|
+
parentId,
|
|
44
|
+
limit,
|
|
45
|
+
sort,
|
|
46
|
+
includeFiles,
|
|
47
|
+
filters,
|
|
48
|
+
});
|
|
49
|
+
setMessages(res.messages);
|
|
50
|
+
hasMoreRef.current = res.hasMore;
|
|
51
|
+
setHasMore(res.hasMore);
|
|
52
|
+
advanceCursor(res);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
(0, handleError_1.handleError)(err, "Failed to fetch messages");
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
loadingRef.current = false;
|
|
59
|
+
setLoading(false);
|
|
60
|
+
}
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
+
}, [fetchMany, conversationId, parentId, limit, sort, includeFiles, filtersKey, advanceCursor]);
|
|
63
|
+
const loadMore = (0, react_1.useCallback)(async () => {
|
|
64
|
+
if (loadingRef.current || !hasMoreRef.current || !cursorRef.current)
|
|
65
|
+
return;
|
|
66
|
+
loadingRef.current = true;
|
|
67
|
+
setLoading(true);
|
|
68
|
+
try {
|
|
69
|
+
const res = await fetchMany({
|
|
70
|
+
conversationId,
|
|
71
|
+
parentId,
|
|
72
|
+
limit,
|
|
73
|
+
sort,
|
|
74
|
+
includeFiles,
|
|
75
|
+
filters,
|
|
76
|
+
...(sort === "asc"
|
|
77
|
+
? { after: cursorRef.current }
|
|
78
|
+
: { before: cursorRef.current }),
|
|
79
|
+
});
|
|
80
|
+
setMessages((prev) => [...prev, ...res.messages]);
|
|
81
|
+
hasMoreRef.current = res.hasMore;
|
|
82
|
+
setHasMore(res.hasMore);
|
|
83
|
+
advanceCursor(res);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
(0, handleError_1.handleError)(err, "Failed to load more messages");
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
loadingRef.current = false;
|
|
90
|
+
setLoading(false);
|
|
91
|
+
}
|
|
92
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
93
|
+
}, [fetchMany, conversationId, parentId, limit, sort, includeFiles, filtersKey, advanceCursor]);
|
|
94
|
+
(0, react_1.useEffect)(() => {
|
|
95
|
+
refetch();
|
|
96
|
+
}, [refetch]);
|
|
97
|
+
return { messages, loading, hasMore, loadMore, refetch };
|
|
98
|
+
}
|
|
99
|
+
exports.default = useFetchManyChatMessagesWrapper;
|
|
100
|
+
//# sourceMappingURL=useFetchManyChatMessagesWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchManyChatMessagesWrapper.js","sourceRoot":"","sources":["../../../../../src/hooks/chat/messages/useFetchManyChatMessagesWrapper.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ChatMessage } from "../../../interfaces/models/ChatMessage";
|
|
2
|
+
export interface UseLiveChatMessagesProps {
|
|
3
|
+
conversationId: string;
|
|
4
|
+
parentId?: string | null;
|
|
5
|
+
limit?: number;
|
|
6
|
+
includeFiles?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface UseLiveChatMessagesValues {
|
|
9
|
+
messages: ChatMessage[];
|
|
10
|
+
loading: boolean;
|
|
11
|
+
hasMore: boolean;
|
|
12
|
+
loadOlder: () => Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Live, store-backed view of a conversation's messages. Reads from the shared
|
|
16
|
+
* Redux bucket that `ChatProvider` keeps in sync via socket events, so new
|
|
17
|
+
* messages, edits, reactions and reply-count changes appear in real time, and
|
|
18
|
+
* state is shared with `useSendMessage` (optimistic inserts), unread tracking
|
|
19
|
+
* and reconnect catch-up.
|
|
20
|
+
*
|
|
21
|
+
* This is the canonical conversation surface. For a read-only / filtered query
|
|
22
|
+
* that should NOT be polluted by live traffic, use
|
|
23
|
+
* `useFetchManyChatMessagesWrapper` instead.
|
|
24
|
+
*/
|
|
25
|
+
declare function useLiveChatMessages({ conversationId, parentId, limit, includeFiles, }: UseLiveChatMessagesProps): UseLiveChatMessagesValues;
|
|
26
|
+
export default useLiveChatMessages;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const hooks_1 = require("../../../store/hooks");
|
|
8
|
+
const chatSlice_1 = require("../../../store/slices/chatSlice");
|
|
9
|
+
const useProject_1 = __importDefault(require("../../projects/useProject"));
|
|
10
|
+
const handleError_1 = require("../../../utils/handleError");
|
|
11
|
+
const useFetchManyChatMessages_1 = __importDefault(require("./useFetchManyChatMessages"));
|
|
12
|
+
/**
|
|
13
|
+
* Live, store-backed view of a conversation's messages. Reads from the shared
|
|
14
|
+
* Redux bucket that `ChatProvider` keeps in sync via socket events, so new
|
|
15
|
+
* messages, edits, reactions and reply-count changes appear in real time, and
|
|
16
|
+
* state is shared with `useSendMessage` (optimistic inserts), unread tracking
|
|
17
|
+
* and reconnect catch-up.
|
|
18
|
+
*
|
|
19
|
+
* This is the canonical conversation surface. For a read-only / filtered query
|
|
20
|
+
* that should NOT be polluted by live traffic, use
|
|
21
|
+
* `useFetchManyChatMessagesWrapper` instead.
|
|
22
|
+
*/
|
|
23
|
+
function useLiveChatMessages({ conversationId, parentId, limit = 50, includeFiles, }) {
|
|
24
|
+
const dispatch = (0, hooks_1.useSublayDispatch)();
|
|
25
|
+
const { projectId } = (0, useProject_1.default)();
|
|
26
|
+
const fetchMany = (0, useFetchManyChatMessages_1.default)();
|
|
27
|
+
const isThread = Boolean(parentId);
|
|
28
|
+
// Read from the correct Redux bucket
|
|
29
|
+
const mainMessages = (0, hooks_1.useSublaySelector)((0, chatSlice_1.selectMessages)(conversationId));
|
|
30
|
+
const mainLoading = (0, hooks_1.useSublaySelector)((0, chatSlice_1.selectMessagesLoading)(conversationId));
|
|
31
|
+
const mainHasMore = (0, hooks_1.useSublaySelector)((0, chatSlice_1.selectMessagesHasMore)(conversationId));
|
|
32
|
+
const threadMessages = (0, hooks_1.useSublaySelector)((0, chatSlice_1.selectThreadReplies)(parentId ?? ""));
|
|
33
|
+
const threadLoading = (0, hooks_1.useSublaySelector)((0, chatSlice_1.selectThreadLoading)(parentId ?? ""));
|
|
34
|
+
const threadHasMore = (0, hooks_1.useSublaySelector)((0, chatSlice_1.selectThreadHasMore)(parentId ?? ""));
|
|
35
|
+
const messages = isThread ? threadMessages : mainMessages;
|
|
36
|
+
const loading = isThread ? threadLoading : mainLoading;
|
|
37
|
+
const hasMore = isThread ? threadHasMore : mainHasMore;
|
|
38
|
+
// Keep fresh refs to message arrays so loadOlder can read cursors without
|
|
39
|
+
// closing over stale state
|
|
40
|
+
const mainMessagesRef = (0, react_1.useRef)(mainMessages);
|
|
41
|
+
mainMessagesRef.current = mainMessages;
|
|
42
|
+
const threadMessagesRef = (0, react_1.useRef)(threadMessages);
|
|
43
|
+
threadMessagesRef.current = threadMessages;
|
|
44
|
+
// Fetch a page of messages.
|
|
45
|
+
// `before` is an ISO 8601 timestamp — the server queries messages created
|
|
46
|
+
// before this point in time (not a UUID cursor).
|
|
47
|
+
const fetchPage = (0, react_1.useCallback)(async (before) => {
|
|
48
|
+
if (!projectId || !conversationId)
|
|
49
|
+
return;
|
|
50
|
+
try {
|
|
51
|
+
const { messages: items, hasMore: more } = await fetchMany({
|
|
52
|
+
conversationId,
|
|
53
|
+
parentId,
|
|
54
|
+
before,
|
|
55
|
+
limit,
|
|
56
|
+
sort: isThread ? "asc" : "desc",
|
|
57
|
+
includeFiles,
|
|
58
|
+
});
|
|
59
|
+
if (isThread) {
|
|
60
|
+
// Thread replies come back ASC — dispatch as-is
|
|
61
|
+
dispatch((0, chatSlice_1.setThreadReplies)({
|
|
62
|
+
parentMessageId: parentId,
|
|
63
|
+
messages: items,
|
|
64
|
+
hasMore: more,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Main stream comes back DESC (newest first for cursor efficiency).
|
|
69
|
+
// Redux stores messages ASC — reverse before dispatching.
|
|
70
|
+
const ascending = [...items].reverse();
|
|
71
|
+
ascending.forEach((msg) => dispatch((0, chatSlice_1.upsertMessage)(msg)));
|
|
72
|
+
dispatch((0, chatSlice_1.setMessagesHasMore)({ conversationId, hasMore: more }));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
(0, handleError_1.handleError)(err, "Failed to load messages");
|
|
77
|
+
}
|
|
78
|
+
}, [projectId, conversationId, parentId, isThread, limit, includeFiles, fetchMany, dispatch]);
|
|
79
|
+
// Initial fetch on mount
|
|
80
|
+
(0, react_1.useEffect)(() => {
|
|
81
|
+
if (!projectId || !conversationId)
|
|
82
|
+
return;
|
|
83
|
+
const initialFetch = async () => {
|
|
84
|
+
if (isThread) {
|
|
85
|
+
dispatch((0, chatSlice_1.setThreadLoading)({ parentMessageId: parentId, loading: true }));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
dispatch((0, chatSlice_1.setMessagesLoading)({ conversationId, loading: true }));
|
|
89
|
+
}
|
|
90
|
+
await fetchPage(null);
|
|
91
|
+
if (isThread) {
|
|
92
|
+
dispatch((0, chatSlice_1.setThreadLoading)({ parentMessageId: parentId, loading: false }));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
dispatch((0, chatSlice_1.setMessagesLoading)({ conversationId, loading: false }));
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
initialFetch();
|
|
99
|
+
// Only re-run when the conversation/thread identity changes
|
|
100
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
|
+
}, [projectId, conversationId, parentId]);
|
|
102
|
+
// Load more messages:
|
|
103
|
+
// - Main stream: fetch older messages using `before` cursor (oldest loaded createdAt)
|
|
104
|
+
// - Thread: fetch newer replies using `after` cursor (newest loaded createdAt), append
|
|
105
|
+
const loadOlder = (0, react_1.useCallback)(async () => {
|
|
106
|
+
if (loading || !hasMore)
|
|
107
|
+
return;
|
|
108
|
+
if (isThread) {
|
|
109
|
+
const currentItems = threadMessagesRef.current;
|
|
110
|
+
const newest = currentItems[currentItems.length - 1];
|
|
111
|
+
if (!newest || !parentId || !projectId || !conversationId)
|
|
112
|
+
return;
|
|
113
|
+
const after = new Date(newest.createdAt).toISOString();
|
|
114
|
+
dispatch((0, chatSlice_1.setThreadLoading)({ parentMessageId: parentId, loading: true }));
|
|
115
|
+
try {
|
|
116
|
+
const { messages: newItems, hasMore: more } = await fetchMany({
|
|
117
|
+
conversationId,
|
|
118
|
+
parentId,
|
|
119
|
+
after,
|
|
120
|
+
limit,
|
|
121
|
+
sort: "asc",
|
|
122
|
+
includeFiles,
|
|
123
|
+
});
|
|
124
|
+
dispatch((0, chatSlice_1.setThreadReplies)({
|
|
125
|
+
parentMessageId: parentId,
|
|
126
|
+
messages: [...currentItems, ...newItems],
|
|
127
|
+
hasMore: more,
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
(0, handleError_1.handleError)(err, "Failed to load more thread replies");
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
dispatch((0, chatSlice_1.setThreadLoading)({ parentMessageId: parentId, loading: false }));
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const oldest = mainMessagesRef.current[0];
|
|
139
|
+
if (!oldest)
|
|
140
|
+
return;
|
|
141
|
+
const before = new Date(oldest.createdAt).toISOString();
|
|
142
|
+
dispatch((0, chatSlice_1.setMessagesLoading)({ conversationId, loading: true }));
|
|
143
|
+
await fetchPage(before);
|
|
144
|
+
dispatch((0, chatSlice_1.setMessagesLoading)({ conversationId, loading: false }));
|
|
145
|
+
}, [loading, hasMore, isThread, parentId, projectId, conversationId, limit, includeFiles, fetchMany, dispatch, fetchPage]);
|
|
146
|
+
return { messages, loading, hasMore, loadOlder };
|
|
147
|
+
}
|
|
148
|
+
exports.default = useLiveChatMessages;
|
|
149
|
+
//# sourceMappingURL=useLiveChatMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveChatMessages.js","sourceRoot":"","sources":["../../../../../src/hooks/chat/messages/useLiveChatMessages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const useLiveChatMessages_1 = __importDefault(require("./useLiveChatMessages"));
|
|
7
7
|
const useSendMessage_1 = __importDefault(require("./useSendMessage"));
|
|
8
8
|
function useMessageThread({ conversationId, messageId, }) {
|
|
9
|
-
const { messages, loading, hasMore, loadOlder } = (0,
|
|
9
|
+
const { messages, loading, hasMore, loadOlder } = (0, useLiveChatMessages_1.default)({
|
|
10
10
|
conversationId,
|
|
11
11
|
parentId: messageId,
|
|
12
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageThread.js","sourceRoot":"","sources":["../../../../../src/hooks/chat/messages/useMessageThread.tsx"],"names":[],"mappings":";;;;;AACA,
|
|
1
|
+
{"version":3,"file":"useMessageThread.js","sourceRoot":"","sources":["../../../../../src/hooks/chat/messages/useMessageThread.tsx"],"names":[],"mappings":";;;;;AACA,gFAAwD;AACxD,sEAAqE;AAerE,SAAS,gBAAgB,CAAC,EACxB,cAAc,EACd,SAAS,GACa;IACtB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAA,6BAAmB,EAAC;QACpE,cAAc;QACd,QAAQ,EAAE,SAAS;KACpB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAA,wBAAc,EAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,CAAC,MAAkD,EAAE,EAAE,CACvE,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;IAElD,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,OAAO;QACP,OAAO;QACP,QAAQ,EAAE,SAAS;QACnB,SAAS;KACV,CAAC;AACJ,CAAC;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const useLiveChatMessages_1 = __importDefault(require("./messages/useLiveChatMessages"));
|
|
7
7
|
const useSendMessage_1 = __importDefault(require("./messages/useSendMessage"));
|
|
8
8
|
const useConversationMembers_1 = __importDefault(require("./conversations/useConversationMembers"));
|
|
9
9
|
const useMarkConversationAsRead_1 = __importDefault(require("./useMarkConversationAsRead"));
|
|
@@ -13,7 +13,7 @@ const useTypingIndicator_1 = __importDefault(require("./useTypingIndicator"));
|
|
|
13
13
|
* Combines messages, send, members, read-state, and typing indicators into one object.
|
|
14
14
|
*/
|
|
15
15
|
function useConversationData({ conversationId, }) {
|
|
16
|
-
const { messages, loading: messagesLoading, hasMore, loadOlder } = (0,
|
|
16
|
+
const { messages, loading: messagesLoading, hasMore, loadOlder } = (0, useLiveChatMessages_1.default)({
|
|
17
17
|
conversationId,
|
|
18
18
|
});
|
|
19
19
|
const send = (0, useSendMessage_1.default)({ conversationId });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversationData.js","sourceRoot":"","sources":["../../../../src/hooks/chat/useConversationData.tsx"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"useConversationData.js","sourceRoot":"","sources":["../../../../src/hooks/chat/useConversationData.tsx"],"names":[],"mappings":";;;;;AAAA,yFAAiE;AACjE,+EAAuD;AAEvD,oGAEgD;AAChD,4FAAoE;AACpE,8EAAsD;AAoCtD;;;GAGG;AACH,SAAS,mBAAmB,CAAC,EAC3B,cAAc,GACW;IACzB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAA,6BAAmB,EAAC;QACrF,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAA,wBAAc,EAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAEhD,MAAM,EACJ,OAAO,EACP,OAAO,EAAE,cAAc,EACvB,SAAS,EACT,YAAY,EACZ,KAAK,EACL,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,GAAG,IAAA,gCAAsB,EAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG,IAAA,mCAAyB,EAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAE3D,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAA,4BAAkB,EAAC;QAClE,cAAc;KACf,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,eAAe;QACf,OAAO;QACP,SAAS;QACT,IAAI;QACJ,OAAO;QACP,cAAc;QACd,SAAS;QACT,YAAY;QACZ,KAAK;QACL,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,IAAI;QACJ,WAAW;QACX,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC;AAED,kBAAe,mBAAmB,CAAC"}
|
|
@@ -29,6 +29,8 @@ export { default as useFetchSpaceTeam } from "./useFetchSpaceTeam";
|
|
|
29
29
|
export type { FetchSpaceTeamProps } from "./useFetchSpaceTeam";
|
|
30
30
|
export { default as useFetchUserSpaces } from "./useFetchUserSpaces";
|
|
31
31
|
export type { FetchUserSpacesProps } from "./useFetchUserSpaces";
|
|
32
|
+
export { default as useFetchMutualSpaces } from "./useFetchMutualSpaces";
|
|
33
|
+
export type { FetchMutualSpacesProps } from "./useFetchMutualSpaces";
|
|
32
34
|
export { default as useCheckMyMembership } from "./useCheckMyMembership";
|
|
33
35
|
export type { CheckMyMembershipProps } from "./useCheckMyMembership";
|
|
34
36
|
export { default as useUpdateMemberRole } from "./useUpdateMemberRole";
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useReorderRules = exports.useFetchManyRules = exports.useFetchRule = exports.useDeleteRule = exports.useUpdateRule = exports.useCreateRule = exports.useUpdateDigestConfig = exports.useFetchDigestConfig = exports.useCheckSlugAvailability = exports.useSpacePermissions = exports.useSpaceMentions = exports.useModerateSpaceComment = exports.useModerateSpaceEntity = exports.useUnbanMember = exports.useRemoveMember = exports.useDeclineMember = exports.useApproveMember = exports.useUpdateMemberRole = exports.useCheckMyMembership = exports.useFetchUserSpaces = exports.useFetchSpaceTeam = exports.useFetchSpaceMembers = exports.useLeaveSpace = exports.useJoinSpace = exports.useDeleteSpace = exports.useUpdateSpace = exports.useCreateSpace = exports.useFetchManySpaces = exports.useFetchSpaceChildren = exports.useFetchSpaceBreadcrumb = exports.useFetchSpaceBySlug = exports.useFetchSpaceByShortId = exports.useFetchSpace = exports.useSpaceData = exports.useSpace = void 0;
|
|
6
|
+
exports.useReorderRules = exports.useFetchManyRules = exports.useFetchRule = exports.useDeleteRule = exports.useUpdateRule = exports.useCreateRule = exports.useUpdateDigestConfig = exports.useFetchDigestConfig = exports.useCheckSlugAvailability = exports.useSpacePermissions = exports.useSpaceMentions = exports.useModerateSpaceComment = exports.useModerateSpaceEntity = exports.useUnbanMember = exports.useRemoveMember = exports.useDeclineMember = exports.useApproveMember = exports.useUpdateMemberRole = exports.useCheckMyMembership = exports.useFetchMutualSpaces = exports.useFetchUserSpaces = exports.useFetchSpaceTeam = exports.useFetchSpaceMembers = exports.useLeaveSpace = exports.useJoinSpace = exports.useDeleteSpace = exports.useUpdateSpace = exports.useCreateSpace = exports.useFetchManySpaces = exports.useFetchSpaceChildren = exports.useFetchSpaceBreadcrumb = exports.useFetchSpaceBySlug = exports.useFetchSpaceByShortId = exports.useFetchSpace = exports.useSpaceData = exports.useSpace = void 0;
|
|
7
7
|
// Single space hooks
|
|
8
8
|
var useSpace_1 = require("./useSpace");
|
|
9
9
|
Object.defineProperty(exports, "useSpace", { enumerable: true, get: function () { return __importDefault(useSpace_1).default; } });
|
|
@@ -40,6 +40,8 @@ var useFetchSpaceTeam_1 = require("./useFetchSpaceTeam");
|
|
|
40
40
|
Object.defineProperty(exports, "useFetchSpaceTeam", { enumerable: true, get: function () { return __importDefault(useFetchSpaceTeam_1).default; } });
|
|
41
41
|
var useFetchUserSpaces_1 = require("./useFetchUserSpaces");
|
|
42
42
|
Object.defineProperty(exports, "useFetchUserSpaces", { enumerable: true, get: function () { return __importDefault(useFetchUserSpaces_1).default; } });
|
|
43
|
+
var useFetchMutualSpaces_1 = require("./useFetchMutualSpaces");
|
|
44
|
+
Object.defineProperty(exports, "useFetchMutualSpaces", { enumerable: true, get: function () { return __importDefault(useFetchMutualSpaces_1).default; } });
|
|
43
45
|
var useCheckMyMembership_1 = require("./useCheckMyMembership");
|
|
44
46
|
Object.defineProperty(exports, "useCheckMyMembership", { enumerable: true, get: function () { return __importDefault(useCheckMyMembership_1).default; } });
|
|
45
47
|
// Member management hooks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/spaces/index.ts"],"names":[],"mappings":";;;;;;AAAA,qBAAqB;AACrB,uCAAiD;AAAxC,qHAAA,OAAO,OAAY;AAC5B,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB;AAGhC,cAAc;AACd,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AAEjC,mEAA6E;AAApE,iJAAA,OAAO,OAA0B;AAE1C,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB;AAEvC,qEAA+E;AAAtE,mJAAA,OAAO,OAA2B;AAE3C,iEAA2E;AAAlE,+IAAA,OAAO,OAAyB;AAEzC,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB;AAGtC,aAAa;AACb,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAElC,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAElC,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAGlC,mBAAmB;AACnB,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB;AAEhC,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AAEjC,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAExC,yDAAmE;AAA1D,uIAAA,OAAO,OAAqB;AAErC,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB;AAEtC,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAGxC,0BAA0B;AAC1B,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB;AAEvC,uDAAiE;AAAxD,qIAAA,OAAO,OAAoB;AAEpC,uDAAiE;AAAxD,qIAAA,OAAO,OAAoB;AAEpC,qDAA+D;AAAtD,mIAAA,OAAO,OAAmB;AAEnC,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAGlC,mBAAmB;AACnB,mEAA6E;AAApE,iJAAA,OAAO,OAA0B;AAE1C,qEAA+E;AAAtE,mJAAA,OAAO,OAA2B;AAG3C,gBAAgB;AAChB,uDAAiE;AAAxD,qIAAA,OAAO,OAAoB;AAMpC,eAAe;AACf,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB;AAKvC,uEAAiF;AAAxE,qJAAA,OAAO,OAA4B;AAG5C,sBAAsB;AACtB,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAExC,iEAA2E;AAAlE,+IAAA,OAAO,OAAyB;AAGzC,wBAAwB;AACxB,iCAOiB;AANf,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/spaces/index.ts"],"names":[],"mappings":";;;;;;AAAA,qBAAqB;AACrB,uCAAiD;AAAxC,qHAAA,OAAO,OAAY;AAC5B,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB;AAGhC,cAAc;AACd,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AAEjC,mEAA6E;AAApE,iJAAA,OAAO,OAA0B;AAE1C,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB;AAEvC,qEAA+E;AAAtE,mJAAA,OAAO,OAA2B;AAE3C,iEAA2E;AAAlE,+IAAA,OAAO,OAAyB;AAEzC,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB;AAGtC,aAAa;AACb,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAElC,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAElC,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAGlC,mBAAmB;AACnB,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB;AAEhC,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AAEjC,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAExC,yDAAmE;AAA1D,uIAAA,OAAO,OAAqB;AAErC,2DAAqE;AAA5D,yIAAA,OAAO,OAAsB;AAEtC,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAExC,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAGxC,0BAA0B;AAC1B,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB;AAEvC,uDAAiE;AAAxD,qIAAA,OAAO,OAAoB;AAEpC,uDAAiE;AAAxD,qIAAA,OAAO,OAAoB;AAEpC,qDAA+D;AAAtD,mIAAA,OAAO,OAAmB;AAEnC,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAGlC,mBAAmB;AACnB,mEAA6E;AAApE,iJAAA,OAAO,OAA0B;AAE1C,qEAA+E;AAAtE,mJAAA,OAAO,OAA2B;AAG3C,gBAAgB;AAChB,uDAAiE;AAAxD,qIAAA,OAAO,OAAoB;AAMpC,eAAe;AACf,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB;AAKvC,uEAAiF;AAAxE,qJAAA,OAAO,OAA4B;AAG5C,sBAAsB;AACtB,+DAAyE;AAAhE,6IAAA,OAAO,OAAwB;AAExC,iEAA2E;AAAlE,+IAAA,OAAO,OAAyB;AAGzC,wBAAwB;AACxB,iCAOiB;AANf,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Space, SpaceIncludeParam } from "../../interfaces/models/Space";
|
|
2
|
+
import { PaginatedResponse } from "../../interfaces/PaginatedResponse";
|
|
3
|
+
export interface FetchMutualSpacesProps {
|
|
4
|
+
/** The OTHER user — spaces shared with this user are returned. */
|
|
5
|
+
userId: string;
|
|
6
|
+
page?: number;
|
|
7
|
+
limit?: number;
|
|
8
|
+
include?: SpaceIncludeParam;
|
|
9
|
+
}
|
|
10
|
+
declare function useFetchMutualSpaces(): (params: FetchMutualSpacesProps) => Promise<PaginatedResponse<Space>>;
|
|
11
|
+
export default useFetchMutualSpaces;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const useProject_1 = __importDefault(require("../projects/useProject"));
|
|
8
|
+
const useAxiosPrivate_1 = __importDefault(require("../../config/useAxiosPrivate"));
|
|
9
|
+
function useFetchMutualSpaces() {
|
|
10
|
+
const { projectId } = (0, useProject_1.default)();
|
|
11
|
+
const axios = (0, useAxiosPrivate_1.default)();
|
|
12
|
+
const fetchMutualSpaces = (0, react_1.useCallback)(async (params) => {
|
|
13
|
+
if (!projectId) {
|
|
14
|
+
throw new Error("No projectId available.");
|
|
15
|
+
}
|
|
16
|
+
const { userId, include, ...rest } = params;
|
|
17
|
+
const response = await axios.get(`/${projectId}/spaces/mutual/${userId}`, {
|
|
18
|
+
params: {
|
|
19
|
+
...rest,
|
|
20
|
+
include: Array.isArray(include) ? include.join(",") : include,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
return response.data;
|
|
24
|
+
}, [projectId, axios]);
|
|
25
|
+
return fetchMutualSpaces;
|
|
26
|
+
}
|
|
27
|
+
exports.default = useFetchMutualSpaces;
|
|
28
|
+
//# sourceMappingURL=useFetchMutualSpaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchMutualSpaces.js","sourceRoot":"","sources":["../../../../src/hooks/spaces/useFetchMutualSpaces.tsx"],"names":[],"mappings":";;;;;AAAA,iCAAoC;AACpC,wEAAgD;AAChD,mFAA2D;AAY3D,SAAS,oBAAoB;IAG3B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,oBAAU,GAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAA,yBAAe,GAAE,CAAC;IAEhC,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EACnC,KAAK,EAAE,MAA8B,EAAE,EAAE;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,IAAI,SAAS,kBAAkB,MAAM,EAAE,EACvC;YACE,MAAM,EAAE;gBACN,GAAG,IAAI;gBACP,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;aAC9D;SACF,CACF,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC,EACD,CAAC,SAAS,EAAE,KAAK,CAAC,CACnB,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,kBAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = exports.useTable = void 0;
|
|
7
|
+
var useTable_1 = require("./useTable");
|
|
8
|
+
Object.defineProperty(exports, "useTable", { enumerable: true, get: function () { return useTable_1.useTable; } });
|
|
9
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(useTable_1).default; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/tables/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA+C;AAAtC,oGAAA,QAAQ,OAAA;AAAE,oHAAA,OAAO,OAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { PaginationMetadata } from "../../interfaces/PaginatedResponse";
|
|
2
|
+
import type { DbFilter, TableRow } from "../../interfaces/models/Table";
|
|
3
|
+
import { type TableViewState } from "../../store/slices/tablesSlice";
|
|
4
|
+
export type UseTableOptions = Partial<TableViewState>;
|
|
5
|
+
export interface UseTableValues<T extends TableRow = TableRow> {
|
|
6
|
+
rows: T[];
|
|
7
|
+
pagination: PaginationMetadata | null;
|
|
8
|
+
loading: boolean;
|
|
9
|
+
error: unknown;
|
|
10
|
+
refetch: () => void;
|
|
11
|
+
view: TableViewState;
|
|
12
|
+
setView: (view: Partial<TableViewState>) => void;
|
|
13
|
+
setPage: (page: number) => void;
|
|
14
|
+
setFilters: (filters: DbFilter[]) => void;
|
|
15
|
+
setSort: (sortBy: string | undefined, sortDir?: "asc" | "desc") => void;
|
|
16
|
+
setIncludeDeleted: (includeDeleted: boolean) => void;
|
|
17
|
+
createRow: (data: Record<string, unknown>) => Promise<T>;
|
|
18
|
+
updateRow: (rowId: string, data: Record<string, unknown>) => Promise<T>;
|
|
19
|
+
deleteRow: (rowId: string, opts?: {
|
|
20
|
+
force?: boolean;
|
|
21
|
+
}) => Promise<{
|
|
22
|
+
deleted: boolean;
|
|
23
|
+
soft: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
restoreRow: (rowId: string) => Promise<T>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* React hook for a custom table's rows, backed by RTK Query against the `/db`
|
|
29
|
+
* surface. Returns rows + loading/refetch state plus CRUD actions. The query
|
|
30
|
+
* knobs (page/limit/sort/filters/includeDeleted) live in the `tables` slice so
|
|
31
|
+
* multiple consumers of the same table share one view.
|
|
32
|
+
*
|
|
33
|
+
* Core is hook-only — `@sublay/core` has no imperative client object (React
|
|
34
|
+
* hooks + Redux only), so this hook is the custom-table surface.
|
|
35
|
+
*/
|
|
36
|
+
export declare function useTable<T extends TableRow = TableRow>(tableName: string, options?: UseTableOptions): UseTableValues<T>;
|
|
37
|
+
export default useTable;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useTable = useTable;
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const hooks_1 = require("../../store/hooks");
|
|
9
|
+
const useProject_1 = __importDefault(require("../projects/useProject"));
|
|
10
|
+
const tablesSlice_1 = require("../../store/slices/tablesSlice");
|
|
11
|
+
const tablesApi_1 = require("../../store/api/tablesApi");
|
|
12
|
+
const DEFAULT_VIEW = {
|
|
13
|
+
page: 1,
|
|
14
|
+
limit: 20,
|
|
15
|
+
sortBy: undefined,
|
|
16
|
+
sortDir: undefined,
|
|
17
|
+
filters: [],
|
|
18
|
+
includeDeleted: false,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* React hook for a custom table's rows, backed by RTK Query against the `/db`
|
|
22
|
+
* surface. Returns rows + loading/refetch state plus CRUD actions. The query
|
|
23
|
+
* knobs (page/limit/sort/filters/includeDeleted) live in the `tables` slice so
|
|
24
|
+
* multiple consumers of the same table share one view.
|
|
25
|
+
*
|
|
26
|
+
* Core is hook-only — `@sublay/core` has no imperative client object (React
|
|
27
|
+
* hooks + Redux only), so this hook is the custom-table surface.
|
|
28
|
+
*/
|
|
29
|
+
function useTable(tableName, options = {}) {
|
|
30
|
+
const dispatch = (0, hooks_1.useSublayDispatch)();
|
|
31
|
+
const { projectId } = (0, useProject_1.default)();
|
|
32
|
+
const storedView = (0, hooks_1.useSublaySelector)((state) => (0, tablesSlice_1.selectTableView)(state, tableName));
|
|
33
|
+
const view = storedView ?? { ...DEFAULT_VIEW, ...options };
|
|
34
|
+
// Seed the slice view once (idempotent — initializeTableView no-ops if set).
|
|
35
|
+
(0, react_1.useEffect)(() => {
|
|
36
|
+
dispatch((0, tablesSlice_1.initializeTableView)({ tableName, view: options }));
|
|
37
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
38
|
+
}, [tableName]);
|
|
39
|
+
const { data, isLoading, error, refetch } = (0, tablesApi_1.useFetchTableRowsQuery)({
|
|
40
|
+
projectId: projectId,
|
|
41
|
+
tableName,
|
|
42
|
+
page: view.page,
|
|
43
|
+
limit: view.limit,
|
|
44
|
+
sortBy: view.sortBy,
|
|
45
|
+
sortDir: view.sortDir,
|
|
46
|
+
filters: view.filters,
|
|
47
|
+
includeDeleted: view.includeDeleted,
|
|
48
|
+
}, { skip: !projectId });
|
|
49
|
+
const [createRowMutation] = (0, tablesApi_1.useCreateRowMutation)();
|
|
50
|
+
const [updateRowMutation] = (0, tablesApi_1.useUpdateRowMutation)();
|
|
51
|
+
const [deleteRowMutation] = (0, tablesApi_1.useDeleteRowMutation)();
|
|
52
|
+
const [restoreRowMutation] = (0, tablesApi_1.useRestoreRowMutation)();
|
|
53
|
+
const update = (0, react_1.useCallback)((next) => dispatch((0, tablesSlice_1.setTableView)({ tableName, view: next })), [dispatch, tableName]);
|
|
54
|
+
const createRow = (0, react_1.useCallback)(async (rowData) => {
|
|
55
|
+
const res = await createRowMutation({
|
|
56
|
+
projectId: projectId,
|
|
57
|
+
tableName,
|
|
58
|
+
data: rowData,
|
|
59
|
+
}).unwrap();
|
|
60
|
+
return res.row;
|
|
61
|
+
}, [createRowMutation, projectId, tableName]);
|
|
62
|
+
const updateRow = (0, react_1.useCallback)(async (rowId, rowData) => {
|
|
63
|
+
const res = await updateRowMutation({
|
|
64
|
+
projectId: projectId,
|
|
65
|
+
tableName,
|
|
66
|
+
rowId,
|
|
67
|
+
data: rowData,
|
|
68
|
+
}).unwrap();
|
|
69
|
+
return res.row;
|
|
70
|
+
}, [updateRowMutation, projectId, tableName]);
|
|
71
|
+
const deleteRow = (0, react_1.useCallback)(async (rowId, opts) => deleteRowMutation({
|
|
72
|
+
projectId: projectId,
|
|
73
|
+
tableName,
|
|
74
|
+
rowId,
|
|
75
|
+
force: opts?.force,
|
|
76
|
+
}).unwrap(), [deleteRowMutation, projectId, tableName]);
|
|
77
|
+
const restoreRow = (0, react_1.useCallback)(async (rowId) => {
|
|
78
|
+
const res = await restoreRowMutation({
|
|
79
|
+
projectId: projectId,
|
|
80
|
+
tableName,
|
|
81
|
+
rowId,
|
|
82
|
+
}).unwrap();
|
|
83
|
+
return res.row;
|
|
84
|
+
}, [restoreRowMutation, projectId, tableName]);
|
|
85
|
+
return (0, react_1.useMemo)(() => ({
|
|
86
|
+
rows: data?.data ?? [],
|
|
87
|
+
pagination: data?.pagination ?? null,
|
|
88
|
+
loading: isLoading,
|
|
89
|
+
error,
|
|
90
|
+
refetch,
|
|
91
|
+
view,
|
|
92
|
+
setView: update,
|
|
93
|
+
setPage: (page) => update({ page }),
|
|
94
|
+
setFilters: (filters) => update({ filters, page: 1 }),
|
|
95
|
+
setSort: (sortBy, sortDir) => update({ sortBy, sortDir, page: 1 }),
|
|
96
|
+
setIncludeDeleted: (includeDeleted) => update({ includeDeleted, page: 1 }),
|
|
97
|
+
createRow,
|
|
98
|
+
updateRow,
|
|
99
|
+
deleteRow,
|
|
100
|
+
restoreRow,
|
|
101
|
+
}), [
|
|
102
|
+
data,
|
|
103
|
+
isLoading,
|
|
104
|
+
error,
|
|
105
|
+
refetch,
|
|
106
|
+
view,
|
|
107
|
+
update,
|
|
108
|
+
createRow,
|
|
109
|
+
updateRow,
|
|
110
|
+
deleteRow,
|
|
111
|
+
restoreRow,
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
exports.default = useTable;
|
|
115
|
+
//# sourceMappingURL=useTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTable.js","sourceRoot":"","sources":["../../../../src/hooks/tables/useTable.ts"],"names":[],"mappings":"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"}
|