@adminide-stack/yantra-mobile 12.0.141-alpha.1 → 12.0.142-alpha.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/lib/features/agent-chat/NativeAgentChat.js +21 -4
- package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
- package/lib/features/chat/ApprovalCard.js +353 -0
- package/lib/features/chat/ApprovalCard.js.map +1 -0
- package/lib/features/chat/AskUserCard.js +9 -2
- package/lib/features/chat/AskUserCard.js.map +1 -1
- package/lib/features/chat/askUser.js +25 -3
- package/lib/features/chat/askUser.js.map +1 -1
- package/lib/features/chat/queuedFollowUpRows.js +13 -0
- package/lib/features/chat/queuedFollowUpRows.js.map +1 -0
- package/lib/features/dictate/DictateExperience.js +59 -7
- package/lib/features/dictate/DictateExperience.js.map +1 -1
- package/lib/features/dictate/components/NoteView.js +227 -12
- package/lib/features/dictate/components/NoteView.js.map +1 -1
- package/lib/features/dictate/dictateClient.js +93 -23
- package/lib/features/dictate/dictateClient.js.map +1 -1
- package/lib/features/dictate/dictatePreference.js +19 -0
- package/lib/features/dictate/dictatePreference.js.map +1 -0
- package/lib/features/dictate/noteText.js +17 -2
- package/lib/features/dictate/noteText.js.map +1 -1
- package/lib/features/dictate/privacy.js +96 -0
- package/lib/features/dictate/privacy.js.map +1 -0
- package/lib/features/dictate/shownNote.js +24 -0
- package/lib/features/dictate/shownNote.js.map +1 -0
- package/lib/features/discover/DiscoverArticle.js +105 -92
- package/lib/features/discover/DiscoverArticle.js.map +1 -1
- package/lib/features/discover/DiscoverFeed.js +97 -48
- package/lib/features/discover/DiscoverFeed.js.map +1 -1
- package/lib/features/discover/DiscoverFollowUp.js +135 -0
- package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
- package/lib/features/discover/DiscoverSidebar.js +555 -0
- package/lib/features/discover/DiscoverSidebar.js.map +1 -0
- package/lib/features/discover/DiscoverSkeletons.js +123 -0
- package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
- package/lib/features/discover/DiscoverStoryCards.js +193 -87
- package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
- package/lib/features/discover/followUpQuery.js +42 -0
- package/lib/features/discover/followUpQuery.js.map +1 -0
- package/lib/features/discover/markets.js +37 -0
- package/lib/features/discover/markets.js.map +1 -0
- package/lib/features/discover/useDiscoverSidebar.js +148 -0
- package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
- package/lib/features/discover/weather.js +42 -0
- package/lib/features/discover/weather.js.map +1 -0
- package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
- package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
- package/lib/features/inbox/InboxAgentChatPane.js +1 -1
- package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
- package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
- package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
- package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
- package/lib/features/movies/MoviesAgentChatPane.js +1 -1
- package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
- package/lib/features/notion/NotionBlockSheets.js +206 -0
- package/lib/features/notion/NotionBlockSheets.js.map +1 -0
- package/lib/features/notion/NotionBlockView.js +36 -0
- package/lib/features/notion/NotionBlockView.js.map +1 -0
- package/lib/features/notion/NotionCommentsSheet.js +461 -0
- package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
- package/lib/features/notion/NotionConnectionsSheet.js +244 -0
- package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
- package/lib/features/notion/NotionHistorySheet.js +439 -0
- package/lib/features/notion/NotionHistorySheet.js.map +1 -0
- package/lib/features/notion/NotionMediaBlocks.js +803 -0
- package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
- package/lib/features/notion/NotionMentionSheet.js +279 -0
- package/lib/features/notion/NotionMentionSheet.js.map +1 -0
- package/lib/features/notion/NotionPageMenu.js +585 -0
- package/lib/features/notion/NotionPageMenu.js.map +1 -0
- package/lib/features/notion/NotionPageTree.js +220 -0
- package/lib/features/notion/NotionPageTree.js.map +1 -0
- package/lib/features/notion/NotionPageView.js +1253 -152
- package/lib/features/notion/NotionPageView.js.map +1 -1
- package/lib/features/notion/NotionShareSheet.js +606 -0
- package/lib/features/notion/NotionShareSheet.js.map +1 -0
- package/lib/features/notion/NotionSheets.js +87 -15
- package/lib/features/notion/NotionSheets.js.map +1 -1
- package/lib/features/notion/NotionSidebarSections.js +492 -0
- package/lib/features/notion/NotionSidebarSections.js.map +1 -0
- package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
- package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
- package/lib/features/notion/NotionWorkspaceView.js +257 -45
- package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
- package/lib/features/notion/database/DatabaseCells.js +554 -0
- package/lib/features/notion/database/DatabaseCells.js.map +1 -0
- package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
- package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
- package/lib/features/notion/database/DatabaseLayouts.js +461 -0
- package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
- package/lib/features/notion/database/DatabaseSheets.js +791 -0
- package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
- package/lib/features/notion/database/NotionDatabaseView.js +817 -0
- package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
- package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
- package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
- package/lib/features/notion/database/chartData.js +89 -0
- package/lib/features/notion/database/chartData.js.map +1 -0
- package/lib/features/notion/database/chartView.js +112 -0
- package/lib/features/notion/database/chartView.js.map +1 -0
- package/lib/features/notion/database/connectorButton.js +33 -0
- package/lib/features/notion/database/connectorButton.js.map +1 -0
- package/lib/features/notion/database/databaseCalc.js +208 -0
- package/lib/features/notion/database/databaseCalc.js.map +1 -0
- package/lib/features/notion/database/databaseCalendar.js +157 -0
- package/lib/features/notion/database/databaseCalendar.js.map +1 -0
- package/lib/features/notion/database/databaseCsv.js +98 -0
- package/lib/features/notion/database/databaseCsv.js.map +1 -0
- package/lib/features/notion/database/databaseCsvActions.js +58 -0
- package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
- package/lib/features/notion/database/databaseFilter.js +473 -0
- package/lib/features/notion/database/databaseFilter.js.map +1 -0
- package/lib/features/notion/database/databaseFormula.js +1072 -0
- package/lib/features/notion/database/databaseFormula.js.map +1 -0
- package/lib/features/notion/database/databaseGroup.js +151 -0
- package/lib/features/notion/database/databaseGroup.js.map +1 -0
- package/lib/features/notion/database/databaseRollup.js +58 -0
- package/lib/features/notion/database/databaseRollup.js.map +1 -0
- package/lib/features/notion/database/databaseTimeline.js +156 -0
- package/lib/features/notion/database/databaseTimeline.js.map +1 -0
- package/lib/features/notion/database/databaseView.js +1188 -0
- package/lib/features/notion/database/databaseView.js.map +1 -0
- package/lib/features/notion/database/databaseViews.js +310 -0
- package/lib/features/notion/database/databaseViews.js.map +1 -0
- package/lib/features/notion/database/relationSource.js +92 -0
- package/lib/features/notion/database/relationSource.js.map +1 -0
- package/lib/features/notion/database/uniqueId.js +17 -0
- package/lib/features/notion/database/uniqueId.js.map +1 -0
- package/lib/features/notion/database/useNotionDatabase.js +617 -0
- package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
- package/lib/features/notion/notionAgentRunStatus.js +39 -0
- package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
- package/lib/features/notion/notionCodeLanguages.js +112 -0
- package/lib/features/notion/notionCodeLanguages.js.map +1 -0
- package/lib/features/notion/notionComments.js +86 -0
- package/lib/features/notion/notionComments.js.map +1 -0
- package/lib/features/notion/notionConnections.js +74 -0
- package/lib/features/notion/notionConnections.js.map +1 -0
- package/lib/features/notion/notionDocuments.js +453 -1
- package/lib/features/notion/notionDocuments.js.map +1 -1
- package/lib/features/notion/notionEditorModel.js +142 -7
- package/lib/features/notion/notionEditorModel.js.map +1 -1
- package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
- package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
- package/lib/features/notion/notionMedia.js +119 -0
- package/lib/features/notion/notionMedia.js.map +1 -0
- package/lib/features/notion/notionMentionDate.js +32 -0
- package/lib/features/notion/notionMentionDate.js.map +1 -0
- package/lib/features/notion/notionMentionOptions.js +162 -0
- package/lib/features/notion/notionMentionOptions.js.map +1 -0
- package/lib/features/notion/notionNotesAgent.js +445 -0
- package/lib/features/notion/notionNotesAgent.js.map +1 -0
- package/lib/features/notion/notionPageAccess.js +168 -0
- package/lib/features/notion/notionPageAccess.js.map +1 -0
- package/lib/features/notion/notionPageActions.js +138 -0
- package/lib/features/notion/notionPageActions.js.map +1 -0
- package/lib/features/notion/notionPageHistory.js +154 -0
- package/lib/features/notion/notionPageHistory.js.map +1 -0
- package/lib/features/notion/notionPageKinds.js +200 -0
- package/lib/features/notion/notionPageKinds.js.map +1 -0
- package/lib/features/notion/notionRecents.js +48 -0
- package/lib/features/notion/notionRecents.js.map +1 -0
- package/lib/features/notion/notionRichText.js +177 -0
- package/lib/features/notion/notionRichText.js.map +1 -0
- package/lib/features/notion/notionRichTitle.js +336 -0
- package/lib/features/notion/notionRichTitle.js.map +1 -0
- package/lib/features/notion/useNotionWorkspace.js +272 -13
- package/lib/features/notion/useNotionWorkspace.js.map +1 -1
- package/lib/features/notion/usePageActions.js +155 -0
- package/lib/features/notion/usePageActions.js.map +1 -0
- package/lib/features/resume/ResumeAgentChatPane.js +1 -1
- package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
- package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
- package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
- package/lib/features/study/StudyAgentChatPane.js +1 -1
- package/lib/features/study/StudyAgentChatPane.js.map +1 -1
- package/lib/features/travel/TravelAgentChatPane.js +1 -1
- package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +1 -1
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/codeFiles.js +302 -0
- package/lib/features/webbuilder/codeFiles.js.map +1 -0
- package/lib/features/webbuilder/codeHighlight.js +209 -0
- package/lib/features/webbuilder/codeHighlight.js.map +1 -0
- package/lib/features/webbuilder/components/CodeView.js +682 -52
- package/lib/features/webbuilder/components/CodeView.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
- package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectChat.js +3 -3
- package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
- package/lib/features/webbuilder/stepLabels.js +68 -0
- package/lib/features/webbuilder/stepLabels.js.map +1 -0
- package/lib/hooks/useHostChatSteering.js +45 -0
- package/lib/hooks/useHostChatSteering.js.map +1 -0
- package/lib/screens/Chat/index.js +2 -12
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
- package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
- package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
- package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
- package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
- package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
- package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
- package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
- package/lib/screens/NotionPage/index.js +2 -2
- package/lib/screens/NotionPage/index.js.map +1 -1
- package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
- package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
- package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
- package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
- package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
- package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
- package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
- package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/index.js +1 -1
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useMemo,useState}from'react';import {Modal,KeyboardAvoidingView,View,Text,Pressable,StyleSheet,ActivityIndicator,FlatList,TextInput,Platform,Alert}from'react-native';import {Ionicons}from'@expo/vector-icons';import {useQuery,useApolloClient}from'@apollo/client/index.js';import {NATIVE_NOTION_COMMENTS,NATIVE_NOTION_EDIT_COMMENT,NATIVE_NOTION_TOGGLE_REACTION,NATIVE_NOTION_RESOLVE_THREAD,NATIVE_NOTION_DELETE_COMMENT,NATIVE_NOTION_ADD_COMMENT}from'./notionDocuments.js';import {groupThreads,textToBody,authorName,commentTimeLabel,commentText,reactionCount,COMMENT_REACTIONS}from'./notionComments.js';import {serverErrorText}from'./notionPageActions.js';import {ui}from'./notionUi.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
function usePageComments(pageId) {
|
|
21
|
+
const query = useQuery(NATIVE_NOTION_COMMENTS, {
|
|
22
|
+
variables: {
|
|
23
|
+
pageId: pageId != null ? pageId : "",
|
|
24
|
+
includeResolved: true
|
|
25
|
+
},
|
|
26
|
+
skip: !pageId,
|
|
27
|
+
fetchPolicy: "cache-and-network"
|
|
28
|
+
});
|
|
29
|
+
const threads = useMemo(() => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
return groupThreads((_b = (_a = query.data) == null ? void 0 : _a.notionComments) != null ? _b : []);
|
|
32
|
+
}, [query.data]);
|
|
33
|
+
const openCounts = useMemo(() => {
|
|
34
|
+
const out = /* @__PURE__ */ new Map();
|
|
35
|
+
threads.filter((t) => !t.resolved).forEach((t) => {
|
|
36
|
+
var _a, _b, _c;
|
|
37
|
+
return out.set((_a = t.blockId) != null ? _a : "", ((_c = out.get((_b = t.blockId) != null ? _b : "")) != null ? _c : 0) + 1);
|
|
38
|
+
});
|
|
39
|
+
return out;
|
|
40
|
+
}, [threads]);
|
|
41
|
+
return {
|
|
42
|
+
threads,
|
|
43
|
+
openCounts,
|
|
44
|
+
refetch: query.refetch,
|
|
45
|
+
loading: query.loading && !query.data,
|
|
46
|
+
error: query.error
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function CommentsSheet({
|
|
50
|
+
visible,
|
|
51
|
+
palette,
|
|
52
|
+
pageId,
|
|
53
|
+
blockId,
|
|
54
|
+
blockLabel,
|
|
55
|
+
onClose
|
|
56
|
+
}) {
|
|
57
|
+
const client = useApolloClient();
|
|
58
|
+
const {
|
|
59
|
+
threads,
|
|
60
|
+
refetch,
|
|
61
|
+
loading,
|
|
62
|
+
error
|
|
63
|
+
} = usePageComments(visible ? pageId : null);
|
|
64
|
+
const [tab, setTab] = useState("open");
|
|
65
|
+
const [draft, setDraft] = useState("");
|
|
66
|
+
const [sending, setSending] = useState(false);
|
|
67
|
+
const [message, setMessage] = useState(null);
|
|
68
|
+
const [editing, setEditing] = useState(null);
|
|
69
|
+
const shown = threads.filter((t) => (tab === "open" ? !t.resolved : t.resolved) && (blockId ? t.blockId === blockId : true));
|
|
70
|
+
const resolvedCount = threads.filter((t) => t.resolved && (blockId ? t.blockId === blockId : true)).length;
|
|
71
|
+
const mutate = async (mutation, variables, reload = false) => {
|
|
72
|
+
setMessage(null);
|
|
73
|
+
try {
|
|
74
|
+
await client.mutate({
|
|
75
|
+
mutation,
|
|
76
|
+
variables,
|
|
77
|
+
errorPolicy: "none"
|
|
78
|
+
});
|
|
79
|
+
if (reload) await refetch();
|
|
80
|
+
return true;
|
|
81
|
+
} catch (err) {
|
|
82
|
+
setMessage(serverErrorText(err));
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const send = async (text, parentId) => {
|
|
87
|
+
const body = textToBody(text.trim());
|
|
88
|
+
if (!body.length) return false;
|
|
89
|
+
return mutate(NATIVE_NOTION_ADD_COMMENT, {
|
|
90
|
+
input: __spreadProps(__spreadValues(__spreadValues({
|
|
91
|
+
pageId
|
|
92
|
+
}, blockId && !parentId ? {
|
|
93
|
+
blockId
|
|
94
|
+
} : {}), parentId ? {
|
|
95
|
+
parentId
|
|
96
|
+
} : {}), {
|
|
97
|
+
body
|
|
98
|
+
})
|
|
99
|
+
}, true);
|
|
100
|
+
};
|
|
101
|
+
const submit = async () => {
|
|
102
|
+
if (sending) return;
|
|
103
|
+
setSending(true);
|
|
104
|
+
if (await send(draft)) setDraft("");
|
|
105
|
+
setSending(false);
|
|
106
|
+
};
|
|
107
|
+
const commentMenu = (c) => {
|
|
108
|
+
if (!c.mine || c.deleted) return;
|
|
109
|
+
Alert.alert("Comment", commentText(c.body).slice(0, 80), [{
|
|
110
|
+
text: "Edit",
|
|
111
|
+
onPress: () => setEditing({
|
|
112
|
+
id: c.id,
|
|
113
|
+
text: commentText(c.body)
|
|
114
|
+
})
|
|
115
|
+
}, {
|
|
116
|
+
text: "Delete",
|
|
117
|
+
style: "destructive",
|
|
118
|
+
onPress: () => mutate(NATIVE_NOTION_DELETE_COMMENT, {
|
|
119
|
+
id: c.id
|
|
120
|
+
}, true)
|
|
121
|
+
}, {
|
|
122
|
+
text: "Cancel",
|
|
123
|
+
style: "cancel"
|
|
124
|
+
}]);
|
|
125
|
+
};
|
|
126
|
+
return /* @__PURE__ */ jsx(Modal, { visible, animationType: "slide", presentationStyle: "pageSheet", onRequestClose: onClose, children: /* @__PURE__ */ jsxs(KeyboardAvoidingView, { style: [ui.flex, {
|
|
127
|
+
backgroundColor: palette.bg
|
|
128
|
+
}], behavior: Platform.OS === "ios" ? "padding" : void 0, children: [
|
|
129
|
+
/* @__PURE__ */ jsxs(View, { style: [ui.sheetHeader, {
|
|
130
|
+
borderBottomColor: palette.hairline
|
|
131
|
+
}], children: [
|
|
132
|
+
/* @__PURE__ */ jsx(View, { style: [ui.sheetHeaderSide, ui.sheetHeaderLeft] }),
|
|
133
|
+
/* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [ui.sheetHeaderTitle, {
|
|
134
|
+
color: palette.text
|
|
135
|
+
}], children: blockId ? "Block comments" : "Comments" }),
|
|
136
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onClose, hitSlop: 8, style: ui.sheetHeaderSide, children: /* @__PURE__ */ jsx(Text, { style: [ui.sheetHeaderDone, {
|
|
137
|
+
color: palette.primary
|
|
138
|
+
}], children: "Done" }) })
|
|
139
|
+
] }),
|
|
140
|
+
blockLabel ? /* @__PURE__ */ jsx(Text, { numberOfLines: 2, style: [styles.quote, {
|
|
141
|
+
color: palette.textMuted,
|
|
142
|
+
borderLeftColor: palette.hairline
|
|
143
|
+
}], children: blockLabel }) : null,
|
|
144
|
+
/* @__PURE__ */ jsx(View, { style: [styles.tabs, {
|
|
145
|
+
backgroundColor: palette.fill
|
|
146
|
+
}], children: ["open", "resolved"].map((t) => /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "tab", accessibilityState: {
|
|
147
|
+
selected: tab === t
|
|
148
|
+
}, onPress: () => setTab(t), style: [styles.tab, tab === t && {
|
|
149
|
+
backgroundColor: palette.card
|
|
150
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.tabLabel, {
|
|
151
|
+
color: tab === t ? palette.text : palette.textMuted
|
|
152
|
+
}], children: t === "open" ? "Open" : `Resolved${resolvedCount ? ` (${resolvedCount})` : ""}` }) }, t)) }),
|
|
153
|
+
message || error ? /* @__PURE__ */ jsx(Text, { style: [styles.message, {
|
|
154
|
+
color: palette.danger
|
|
155
|
+
}], children: message != null ? message : serverErrorText(error) }) : null,
|
|
156
|
+
loading ? /* @__PURE__ */ jsx(View, { style: styles.loading, children: /* @__PURE__ */ jsx(ActivityIndicator, { color: palette.textMuted }) }) : /* @__PURE__ */ jsx(FlatList, { data: shown, keyExtractor: (t) => t.id, contentContainerStyle: styles.list, keyboardShouldPersistTaps: "handled", ListEmptyComponent: /* @__PURE__ */ jsx(Text, { style: [styles.empty, {
|
|
157
|
+
color: palette.textMuted
|
|
158
|
+
}], children: tab === "open" ? "No open comments. Start one below." : "No resolved comments." }), renderItem: ({
|
|
159
|
+
item
|
|
160
|
+
}) => /* @__PURE__ */ jsx(ThreadCard, { thread: item, palette, onReply: (text) => send(text, item.root.id), onResolve: () => mutate(NATIVE_NOTION_RESOLVE_THREAD, {
|
|
161
|
+
threadId: item.id,
|
|
162
|
+
resolved: !item.resolved
|
|
163
|
+
}), onReact: (c, emoji) => mutate(NATIVE_NOTION_TOGGLE_REACTION, {
|
|
164
|
+
id: c.id,
|
|
165
|
+
emoji
|
|
166
|
+
}), onMenu: commentMenu, editing, onEditChange: (text) => setEditing((e) => e ? __spreadProps(__spreadValues({}, e), {
|
|
167
|
+
text
|
|
168
|
+
}) : e), onEditSave: async () => {
|
|
169
|
+
if (!(editing == null ? void 0 : editing.text.trim())) return;
|
|
170
|
+
const ok = await mutate(NATIVE_NOTION_EDIT_COMMENT, {
|
|
171
|
+
input: {
|
|
172
|
+
id: editing.id,
|
|
173
|
+
body: textToBody(editing.text.trim())
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
if (ok) setEditing(null);
|
|
177
|
+
}, onEditCancel: () => setEditing(null) }) }),
|
|
178
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.composer, {
|
|
179
|
+
borderTopColor: palette.hairline,
|
|
180
|
+
backgroundColor: palette.card
|
|
181
|
+
}], children: [
|
|
182
|
+
/* @__PURE__ */ jsx(TextInput, { value: draft, onChangeText: setDraft, placeholder: blockId ? "Comment on this block\u2026" : "Add a comment\u2026", placeholderTextColor: palette.textFaint, multiline: true, style: [styles.composerInput, {
|
|
183
|
+
color: palette.text,
|
|
184
|
+
backgroundColor: palette.fill
|
|
185
|
+
}] }),
|
|
186
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: "Send comment", onPress: submit, disabled: !draft.trim() || sending, style: [styles.send, {
|
|
187
|
+
backgroundColor: palette.primary
|
|
188
|
+
}, (!draft.trim() || sending) && styles.disabled], children: sending ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: palette.onPrimary }) : /* @__PURE__ */ jsx(Ionicons, { name: "arrow-up", size: 18, color: palette.onPrimary }) })
|
|
189
|
+
] })
|
|
190
|
+
] }) });
|
|
191
|
+
}
|
|
192
|
+
function ThreadCard({
|
|
193
|
+
thread,
|
|
194
|
+
palette,
|
|
195
|
+
onReply,
|
|
196
|
+
onResolve,
|
|
197
|
+
onReact,
|
|
198
|
+
onMenu,
|
|
199
|
+
editing,
|
|
200
|
+
onEditChange,
|
|
201
|
+
onEditSave,
|
|
202
|
+
onEditCancel
|
|
203
|
+
}) {
|
|
204
|
+
const [replying, setReplying] = useState(false);
|
|
205
|
+
const [reply, setReply] = useState("");
|
|
206
|
+
const [picking, setPicking] = useState(null);
|
|
207
|
+
const comments = [thread.root, ...thread.replies];
|
|
208
|
+
return /* @__PURE__ */ jsxs(View, { style: [styles.thread, {
|
|
209
|
+
backgroundColor: palette.card
|
|
210
|
+
}, ui.cardShadow], children: [
|
|
211
|
+
comments.map((c, i) => /* @__PURE__ */ jsxs(Pressable, { onLongPress: () => onMenu(c), delayLongPress: 350, style: [styles.comment, i > 0 && styles.reply], children: [
|
|
212
|
+
/* @__PURE__ */ jsxs(View, { style: styles.commentHead, children: [
|
|
213
|
+
/* @__PURE__ */ jsx(View, { style: [styles.avatar, {
|
|
214
|
+
backgroundColor: c.author.kind === "agent" ? "#ede9fe" : palette.primarySoft
|
|
215
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.avatarText, {
|
|
216
|
+
color: c.author.kind === "agent" ? "#7c3aed" : palette.primary
|
|
217
|
+
}], children: c.author.kind === "agent" ? "\u2726" : authorName(c.author, {
|
|
218
|
+
mine: c.mine
|
|
219
|
+
}).charAt(0).toUpperCase() }) }),
|
|
220
|
+
/* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.author, {
|
|
221
|
+
color: palette.text
|
|
222
|
+
}], children: authorName(c.author, {
|
|
223
|
+
mine: c.mine
|
|
224
|
+
}) }),
|
|
225
|
+
/* @__PURE__ */ jsxs(Text, { style: [styles.time, {
|
|
226
|
+
color: palette.textFaint
|
|
227
|
+
}], children: [
|
|
228
|
+
commentTimeLabel(c.createdTime),
|
|
229
|
+
c.editedTime ? " \xB7 edited" : ""
|
|
230
|
+
] })
|
|
231
|
+
] }),
|
|
232
|
+
(editing == null ? void 0 : editing.id) === c.id ? /* @__PURE__ */ jsxs(View, { style: styles.replyBox, children: [
|
|
233
|
+
/* @__PURE__ */ jsx(TextInput, { value: editing.text, onChangeText: onEditChange, autoFocus: true, multiline: true, style: [styles.replyInput, {
|
|
234
|
+
color: palette.text,
|
|
235
|
+
backgroundColor: palette.fill
|
|
236
|
+
}] }),
|
|
237
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onEditSave, style: [styles.smallBtn, {
|
|
238
|
+
backgroundColor: palette.primary
|
|
239
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.smallBtnLabel, {
|
|
240
|
+
color: palette.onPrimary
|
|
241
|
+
}], children: "Save" }) }),
|
|
242
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onEditCancel, hitSlop: 6, children: /* @__PURE__ */ jsx(Ionicons, { name: "close", size: 20, color: palette.textMuted }) })
|
|
243
|
+
] }) : /* @__PURE__ */ jsx(Text, { style: [styles.body, {
|
|
244
|
+
color: c.deleted ? palette.textFaint : palette.text
|
|
245
|
+
}], children: c.deleted ? "This comment was deleted." : commentText(c.body) }),
|
|
246
|
+
!c.deleted ? /* @__PURE__ */ jsxs(View, { style: styles.reactions, children: [
|
|
247
|
+
c.reactions.filter((r) => reactionCount(r) > 0).map((r) => /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => onReact(c, r.emoji), style: [styles.reaction, {
|
|
248
|
+
backgroundColor: r.reacted ? palette.primarySoft : palette.fill
|
|
249
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: styles.reactionText, children: `${r.emoji} ${reactionCount(r)}` }) }, r.emoji)),
|
|
250
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: "Add reaction", onPress: () => setPicking(picking === c.id ? null : c.id), hitSlop: 6, style: [styles.reaction, {
|
|
251
|
+
backgroundColor: palette.fill
|
|
252
|
+
}], children: /* @__PURE__ */ jsx(Ionicons, { name: "happy-outline", size: 14, color: palette.textMuted }) })
|
|
253
|
+
] }) : null,
|
|
254
|
+
picking === c.id ? /* @__PURE__ */ jsx(View, { style: styles.picker, children: COMMENT_REACTIONS.map((e) => /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => {
|
|
255
|
+
setPicking(null);
|
|
256
|
+
onReact(c, e);
|
|
257
|
+
}, style: styles.pickerCell, children: /* @__PURE__ */ jsx(Text, { style: styles.pickerEmoji, children: e }) }, e)) }) : null
|
|
258
|
+
] }, c.id)),
|
|
259
|
+
replying ? /* @__PURE__ */ jsxs(View, { style: styles.replyBox, children: [
|
|
260
|
+
/* @__PURE__ */ jsx(TextInput, { value: reply, onChangeText: setReply, placeholder: "Reply\u2026", placeholderTextColor: palette.textFaint, autoFocus: true, multiline: true, style: [styles.replyInput, {
|
|
261
|
+
color: palette.text,
|
|
262
|
+
backgroundColor: palette.fill
|
|
263
|
+
}] }),
|
|
264
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: async () => {
|
|
265
|
+
if (await onReply(reply)) {
|
|
266
|
+
setReply("");
|
|
267
|
+
setReplying(false);
|
|
268
|
+
}
|
|
269
|
+
}, disabled: !reply.trim(), style: [styles.smallBtn, {
|
|
270
|
+
backgroundColor: palette.primary
|
|
271
|
+
}, !reply.trim() && styles.disabled], children: /* @__PURE__ */ jsx(Text, { style: [styles.smallBtnLabel, {
|
|
272
|
+
color: palette.onPrimary
|
|
273
|
+
}], children: "Reply" }) })
|
|
274
|
+
] }) : null,
|
|
275
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.threadActions, {
|
|
276
|
+
borderTopColor: palette.hairline
|
|
277
|
+
}], children: [
|
|
278
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => setReplying((v) => !v), hitSlop: 6, children: /* @__PURE__ */ jsx(Text, { style: [styles.action, {
|
|
279
|
+
color: palette.primary
|
|
280
|
+
}], children: replying ? "Cancel" : "Reply" }) }),
|
|
281
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onResolve, hitSlop: 6, children: /* @__PURE__ */ jsx(Text, { style: [styles.action, {
|
|
282
|
+
color: palette.textMuted
|
|
283
|
+
}], children: thread.resolved ? "Re-open" : "Resolve" }) })
|
|
284
|
+
] })
|
|
285
|
+
] });
|
|
286
|
+
}
|
|
287
|
+
const styles = StyleSheet.create({
|
|
288
|
+
quote: {
|
|
289
|
+
fontSize: 14,
|
|
290
|
+
marginHorizontal: 16,
|
|
291
|
+
marginTop: 12,
|
|
292
|
+
paddingLeft: 10,
|
|
293
|
+
borderLeftWidth: 3
|
|
294
|
+
},
|
|
295
|
+
tabs: {
|
|
296
|
+
flexDirection: "row",
|
|
297
|
+
margin: 16,
|
|
298
|
+
marginBottom: 4,
|
|
299
|
+
padding: 3,
|
|
300
|
+
borderRadius: 12
|
|
301
|
+
},
|
|
302
|
+
tab: {
|
|
303
|
+
flex: 1,
|
|
304
|
+
alignItems: "center",
|
|
305
|
+
paddingVertical: 8,
|
|
306
|
+
borderRadius: 9
|
|
307
|
+
},
|
|
308
|
+
tabLabel: {
|
|
309
|
+
fontSize: 14,
|
|
310
|
+
fontWeight: "600"
|
|
311
|
+
},
|
|
312
|
+
message: {
|
|
313
|
+
fontSize: 13,
|
|
314
|
+
marginHorizontal: 16,
|
|
315
|
+
marginTop: 8
|
|
316
|
+
},
|
|
317
|
+
loading: {
|
|
318
|
+
paddingVertical: 48,
|
|
319
|
+
alignItems: "center"
|
|
320
|
+
},
|
|
321
|
+
list: {
|
|
322
|
+
padding: 16,
|
|
323
|
+
paddingBottom: 24,
|
|
324
|
+
gap: 12
|
|
325
|
+
},
|
|
326
|
+
empty: {
|
|
327
|
+
fontSize: 15,
|
|
328
|
+
textAlign: "center",
|
|
329
|
+
paddingVertical: 40
|
|
330
|
+
},
|
|
331
|
+
thread: {
|
|
332
|
+
borderRadius: 16,
|
|
333
|
+
overflow: "hidden"
|
|
334
|
+
},
|
|
335
|
+
comment: {
|
|
336
|
+
padding: 14,
|
|
337
|
+
gap: 6
|
|
338
|
+
},
|
|
339
|
+
reply: {
|
|
340
|
+
paddingLeft: 30
|
|
341
|
+
},
|
|
342
|
+
commentHead: {
|
|
343
|
+
flexDirection: "row",
|
|
344
|
+
alignItems: "center",
|
|
345
|
+
gap: 8
|
|
346
|
+
},
|
|
347
|
+
avatar: {
|
|
348
|
+
width: 24,
|
|
349
|
+
height: 24,
|
|
350
|
+
borderRadius: 12,
|
|
351
|
+
alignItems: "center",
|
|
352
|
+
justifyContent: "center"
|
|
353
|
+
},
|
|
354
|
+
avatarText: {
|
|
355
|
+
fontSize: 12,
|
|
356
|
+
fontWeight: "800"
|
|
357
|
+
},
|
|
358
|
+
author: {
|
|
359
|
+
flexShrink: 1,
|
|
360
|
+
fontSize: 14,
|
|
361
|
+
fontWeight: "700"
|
|
362
|
+
},
|
|
363
|
+
time: {
|
|
364
|
+
fontSize: 12
|
|
365
|
+
},
|
|
366
|
+
body: {
|
|
367
|
+
fontSize: 15,
|
|
368
|
+
lineHeight: 21
|
|
369
|
+
},
|
|
370
|
+
reactions: {
|
|
371
|
+
flexDirection: "row",
|
|
372
|
+
flexWrap: "wrap",
|
|
373
|
+
gap: 6
|
|
374
|
+
},
|
|
375
|
+
reaction: {
|
|
376
|
+
flexDirection: "row",
|
|
377
|
+
alignItems: "center",
|
|
378
|
+
paddingHorizontal: 8,
|
|
379
|
+
paddingVertical: 3,
|
|
380
|
+
borderRadius: 999,
|
|
381
|
+
minHeight: 24
|
|
382
|
+
},
|
|
383
|
+
reactionText: {
|
|
384
|
+
fontSize: 13
|
|
385
|
+
},
|
|
386
|
+
picker: {
|
|
387
|
+
flexDirection: "row",
|
|
388
|
+
gap: 4
|
|
389
|
+
},
|
|
390
|
+
pickerCell: {
|
|
391
|
+
padding: 4
|
|
392
|
+
},
|
|
393
|
+
pickerEmoji: {
|
|
394
|
+
fontSize: 22
|
|
395
|
+
},
|
|
396
|
+
replyBox: {
|
|
397
|
+
flexDirection: "row",
|
|
398
|
+
alignItems: "flex-end",
|
|
399
|
+
gap: 8,
|
|
400
|
+
paddingHorizontal: 14,
|
|
401
|
+
paddingBottom: 10
|
|
402
|
+
},
|
|
403
|
+
replyInput: {
|
|
404
|
+
flex: 1,
|
|
405
|
+
minHeight: 38,
|
|
406
|
+
maxHeight: 120,
|
|
407
|
+
paddingHorizontal: 12,
|
|
408
|
+
paddingVertical: 8,
|
|
409
|
+
borderRadius: 10,
|
|
410
|
+
fontSize: 15
|
|
411
|
+
},
|
|
412
|
+
smallBtn: {
|
|
413
|
+
paddingHorizontal: 14,
|
|
414
|
+
height: 38,
|
|
415
|
+
borderRadius: 10,
|
|
416
|
+
alignItems: "center",
|
|
417
|
+
justifyContent: "center"
|
|
418
|
+
},
|
|
419
|
+
smallBtnLabel: {
|
|
420
|
+
fontSize: 14,
|
|
421
|
+
fontWeight: "700"
|
|
422
|
+
},
|
|
423
|
+
threadActions: {
|
|
424
|
+
flexDirection: "row",
|
|
425
|
+
gap: 20,
|
|
426
|
+
paddingHorizontal: 14,
|
|
427
|
+
paddingVertical: 10,
|
|
428
|
+
borderTopWidth: StyleSheet.hairlineWidth
|
|
429
|
+
},
|
|
430
|
+
action: {
|
|
431
|
+
fontSize: 14,
|
|
432
|
+
fontWeight: "700"
|
|
433
|
+
},
|
|
434
|
+
composer: {
|
|
435
|
+
flexDirection: "row",
|
|
436
|
+
alignItems: "flex-end",
|
|
437
|
+
gap: 8,
|
|
438
|
+
padding: 12,
|
|
439
|
+
paddingBottom: 28,
|
|
440
|
+
borderTopWidth: StyleSheet.hairlineWidth
|
|
441
|
+
},
|
|
442
|
+
composerInput: {
|
|
443
|
+
flex: 1,
|
|
444
|
+
minHeight: 40,
|
|
445
|
+
maxHeight: 140,
|
|
446
|
+
paddingHorizontal: 12,
|
|
447
|
+
paddingVertical: 10,
|
|
448
|
+
borderRadius: 12,
|
|
449
|
+
fontSize: 16
|
|
450
|
+
},
|
|
451
|
+
send: {
|
|
452
|
+
width: 40,
|
|
453
|
+
height: 40,
|
|
454
|
+
borderRadius: 20,
|
|
455
|
+
alignItems: "center",
|
|
456
|
+
justifyContent: "center"
|
|
457
|
+
},
|
|
458
|
+
disabled: {
|
|
459
|
+
opacity: 0.45
|
|
460
|
+
}
|
|
461
|
+
});export{CommentsSheet,usePageComments};//# sourceMappingURL=NotionCommentsSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotionCommentsSheet.js","sources":["../../../src/features/notion/NotionCommentsSheet.tsx"],"sourcesContent":["/**\n * Page comments - the web comments panel + block thread popover on a phone:\n * Open / Resolved tabs, threads (author, time, text, replies), reply, resolve / re-open,\n * reactions (the web's six), edit / delete your own comment, and a composer that starts a\n * page comment - or a block comment when opened from a block.\n * Same GraphQL as the web (components/api/comments); thread grouping is the web's\n * (notionComments.groupThreads).\n */\nimport React, { useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n FlatList,\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport {\n NATIVE_NOTION_ADD_COMMENT,\n NATIVE_NOTION_COMMENTS,\n NATIVE_NOTION_DELETE_COMMENT,\n NATIVE_NOTION_EDIT_COMMENT,\n NATIVE_NOTION_RESOLVE_THREAD,\n NATIVE_NOTION_TOGGLE_REACTION,\n} from './notionDocuments';\nimport {\n COMMENT_REACTIONS,\n authorName,\n commentText,\n commentTimeLabel,\n groupThreads,\n reactionCount,\n textToBody,\n type NotesComment,\n type NotesCommentThread,\n} from './notionComments';\nimport { serverErrorText } from './notionPageActions';\nimport type { NotionPalette } from './notionTheme';\nimport { ui } from './notionUi';\n\ntype Palette = NotionPalette;\n\n/** A page's comments, shared by the sheet and the editor's counts. */\nexport function usePageComments(pageId: string | null) {\n const query = useQuery<{ notionComments?: NotesComment[] | null }>(NATIVE_NOTION_COMMENTS, {\n variables: { pageId: pageId ?? '', includeResolved: true },\n skip: !pageId,\n fetchPolicy: 'cache-and-network',\n });\n const threads = useMemo(() => groupThreads(query.data?.notionComments ?? []), [query.data]);\n /** Open threads per block ('' = page-level), like the web's margin markers. */\n const openCounts = useMemo(() => {\n const out = new Map<string, number>();\n threads\n .filter((t) => !t.resolved)\n .forEach((t) => out.set(t.blockId ?? '', (out.get(t.blockId ?? '') ?? 0) + 1));\n return out;\n }, [threads]);\n return { threads, openCounts, refetch: query.refetch, loading: query.loading && !query.data, error: query.error };\n}\n\nexport function CommentsSheet({\n visible,\n palette,\n pageId,\n blockId,\n blockLabel,\n onClose,\n}: {\n visible: boolean;\n palette: Palette;\n pageId: string;\n /** Opened from a block: show its threads and start new ones on it. */\n blockId: string | null;\n blockLabel?: string;\n onClose: () => void;\n}) {\n const client = useApolloClient();\n const { threads, refetch, loading, error } = usePageComments(visible ? pageId : null);\n const [tab, setTab] = useState<'open' | 'resolved'>('open');\n const [draft, setDraft] = useState('');\n const [sending, setSending] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n /** The comment being edited inline (Alert.prompt is iOS-only). */\n const [editing, setEditing] = useState<{ id: string; text: string } | null>(null);\n\n const shown = threads.filter(\n (t) => (tab === 'open' ? !t.resolved : t.resolved) && (blockId ? t.blockId === blockId : true),\n );\n const resolvedCount = threads.filter((t) => t.resolved && (blockId ? t.blockId === blockId : true)).length;\n\n const mutate = async (\n mutation: Parameters<typeof client.mutate>[0]['mutation'],\n variables: object,\n reload = false,\n ) => {\n setMessage(null);\n try {\n await client.mutate({ mutation, variables, errorPolicy: 'none' });\n if (reload) await refetch();\n return true;\n } catch (err) {\n setMessage(serverErrorText(err));\n return false;\n }\n };\n\n const send = async (text: string, parentId?: string) => {\n const body = textToBody(text.trim());\n if (!body.length) return false;\n return mutate(\n NATIVE_NOTION_ADD_COMMENT,\n {\n input: {\n pageId,\n ...(blockId && !parentId ? { blockId } : {}),\n ...(parentId ? { parentId } : {}),\n body,\n },\n },\n true,\n );\n };\n\n const submit = async () => {\n if (sending) return;\n setSending(true);\n if (await send(draft)) setDraft('');\n setSending(false);\n };\n\n const commentMenu = (c: NotesComment) => {\n if (!c.mine || c.deleted) return;\n Alert.alert('Comment', commentText(c.body).slice(0, 80), [\n { text: 'Edit', onPress: () => setEditing({ id: c.id, text: commentText(c.body) }) },\n {\n text: 'Delete',\n style: 'destructive',\n onPress: () => mutate(NATIVE_NOTION_DELETE_COMMENT, { id: c.id }, true),\n },\n { text: 'Cancel', style: 'cancel' },\n ]);\n };\n\n return (\n <Modal visible={visible} animationType=\"slide\" presentationStyle=\"pageSheet\" onRequestClose={onClose}>\n <KeyboardAvoidingView\n style={[ui.flex, { backgroundColor: palette.bg }]}\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n >\n <View style={[ui.sheetHeader, { borderBottomColor: palette.hairline }]}>\n <View style={[ui.sheetHeaderSide, ui.sheetHeaderLeft]} />\n <Text numberOfLines={1} style={[ui.sheetHeaderTitle, { color: palette.text }]}>\n {blockId ? 'Block comments' : 'Comments'}\n </Text>\n <Pressable accessibilityRole=\"button\" onPress={onClose} hitSlop={8} style={ui.sheetHeaderSide}>\n <Text style={[ui.sheetHeaderDone, { color: palette.primary }]}>Done</Text>\n </Pressable>\n </View>\n {blockLabel ? (\n <Text\n numberOfLines={2}\n style={[styles.quote, { color: palette.textMuted, borderLeftColor: palette.hairline }]}\n >\n {blockLabel}\n </Text>\n ) : null}\n <View style={[styles.tabs, { backgroundColor: palette.fill }]}>\n {(['open', 'resolved'] as const).map((t) => (\n <Pressable\n key={t}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: tab === t }}\n onPress={() => setTab(t)}\n style={[styles.tab, tab === t && { backgroundColor: palette.card }]}\n >\n <Text style={[styles.tabLabel, { color: tab === t ? palette.text : palette.textMuted }]}>\n {t === 'open' ? 'Open' : `Resolved${resolvedCount ? ` (${resolvedCount})` : ''}`}\n </Text>\n </Pressable>\n ))}\n </View>\n {message || error ? (\n <Text style={[styles.message, { color: palette.danger }]}>{message ?? serverErrorText(error)}</Text>\n ) : null}\n {loading ? (\n <View style={styles.loading}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n ) : (\n <FlatList\n data={shown}\n keyExtractor={(t) => t.id}\n contentContainerStyle={styles.list}\n keyboardShouldPersistTaps=\"handled\"\n ListEmptyComponent={\n <Text style={[styles.empty, { color: palette.textMuted }]}>\n {tab === 'open' ? 'No open comments. Start one below.' : 'No resolved comments.'}\n </Text>\n }\n renderItem={({ item }) => (\n <ThreadCard\n thread={item}\n palette={palette}\n onReply={(text) => send(text, item.root.id)}\n onResolve={() =>\n mutate(NATIVE_NOTION_RESOLVE_THREAD, {\n threadId: item.id,\n resolved: !item.resolved,\n })\n }\n onReact={(c, emoji) => mutate(NATIVE_NOTION_TOGGLE_REACTION, { id: c.id, emoji })}\n onMenu={commentMenu}\n editing={editing}\n onEditChange={(text) => setEditing((e) => (e ? { ...e, text } : e))}\n onEditSave={async () => {\n if (!editing?.text.trim()) return;\n const ok = await mutate(NATIVE_NOTION_EDIT_COMMENT, {\n input: { id: editing.id, body: textToBody(editing.text.trim()) },\n });\n if (ok) setEditing(null);\n }}\n onEditCancel={() => setEditing(null)}\n />\n )}\n />\n )}\n <View style={[styles.composer, { borderTopColor: palette.hairline, backgroundColor: palette.card }]}>\n <TextInput\n value={draft}\n onChangeText={setDraft}\n placeholder={blockId ? 'Comment on this block…' : 'Add a comment…'}\n placeholderTextColor={palette.textFaint}\n multiline\n style={[styles.composerInput, { color: palette.text, backgroundColor: palette.fill }]}\n />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Send comment\"\n onPress={submit}\n disabled={!draft.trim() || sending}\n style={[\n styles.send,\n { backgroundColor: palette.primary },\n (!draft.trim() || sending) && styles.disabled,\n ]}\n >\n {sending ? (\n <ActivityIndicator size=\"small\" color={palette.onPrimary} />\n ) : (\n <Ionicons name=\"arrow-up\" size={18} color={palette.onPrimary} />\n )}\n </Pressable>\n </View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n\nfunction ThreadCard({\n thread,\n palette,\n onReply,\n onResolve,\n onReact,\n onMenu,\n editing,\n onEditChange,\n onEditSave,\n onEditCancel,\n}: {\n editing: { id: string; text: string } | null;\n onEditChange: (text: string) => void;\n onEditSave: () => void;\n onEditCancel: () => void;\n thread: NotesCommentThread;\n palette: Palette;\n onReply: (text: string) => Promise<boolean>;\n onResolve: () => void;\n onReact: (c: NotesComment, emoji: string) => void;\n onMenu: (c: NotesComment) => void;\n}) {\n const [replying, setReplying] = useState(false);\n const [reply, setReply] = useState('');\n const [picking, setPicking] = useState<string | null>(null);\n const comments = [thread.root, ...thread.replies];\n return (\n <View style={[styles.thread, { backgroundColor: palette.card }, ui.cardShadow]}>\n {comments.map((c, i) => (\n <Pressable\n key={c.id}\n onLongPress={() => onMenu(c)}\n delayLongPress={350}\n style={[styles.comment, i > 0 && styles.reply]}\n >\n <View style={styles.commentHead}>\n <View\n style={[\n styles.avatar,\n { backgroundColor: c.author.kind === 'agent' ? '#ede9fe' : palette.primarySoft },\n ]}\n >\n <Text\n style={[\n styles.avatarText,\n { color: c.author.kind === 'agent' ? '#7c3aed' : palette.primary },\n ]}\n >\n {c.author.kind === 'agent'\n ? '✦'\n : authorName(c.author, { mine: c.mine }).charAt(0).toUpperCase()}\n </Text>\n </View>\n <Text numberOfLines={1} style={[styles.author, { color: palette.text }]}>\n {authorName(c.author, { mine: c.mine })}\n </Text>\n <Text style={[styles.time, { color: palette.textFaint }]}>\n {commentTimeLabel(c.createdTime)}\n {c.editedTime ? ' · edited' : ''}\n </Text>\n </View>\n {editing?.id === c.id ? (\n <View style={styles.replyBox}>\n <TextInput\n value={editing.text}\n onChangeText={onEditChange}\n autoFocus\n multiline\n style={[styles.replyInput, { color: palette.text, backgroundColor: palette.fill }]}\n />\n <Pressable\n accessibilityRole=\"button\"\n onPress={onEditSave}\n style={[styles.smallBtn, { backgroundColor: palette.primary }]}\n >\n <Text style={[styles.smallBtnLabel, { color: palette.onPrimary }]}>Save</Text>\n </Pressable>\n <Pressable accessibilityRole=\"button\" onPress={onEditCancel} hitSlop={6}>\n <Ionicons name=\"close\" size={20} color={palette.textMuted} />\n </Pressable>\n </View>\n ) : (\n <Text style={[styles.body, { color: c.deleted ? palette.textFaint : palette.text }]}>\n {c.deleted ? 'This comment was deleted.' : commentText(c.body)}\n </Text>\n )}\n {!c.deleted ? (\n <View style={styles.reactions}>\n {c.reactions\n .filter((r) => reactionCount(r) > 0)\n .map((r) => (\n <Pressable\n key={r.emoji}\n accessibilityRole=\"button\"\n onPress={() => onReact(c, r.emoji)}\n style={[\n styles.reaction,\n { backgroundColor: r.reacted ? palette.primarySoft : palette.fill },\n ]}\n >\n <Text style={styles.reactionText}>{`${r.emoji} ${reactionCount(r)}`}</Text>\n </Pressable>\n ))}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Add reaction\"\n onPress={() => setPicking(picking === c.id ? null : c.id)}\n hitSlop={6}\n style={[styles.reaction, { backgroundColor: palette.fill }]}\n >\n <Ionicons name=\"happy-outline\" size={14} color={palette.textMuted} />\n </Pressable>\n </View>\n ) : null}\n {picking === c.id ? (\n <View style={styles.picker}>\n {COMMENT_REACTIONS.map((e) => (\n <Pressable\n key={e}\n accessibilityRole=\"button\"\n onPress={() => {\n setPicking(null);\n onReact(c, e);\n }}\n style={styles.pickerCell}\n >\n <Text style={styles.pickerEmoji}>{e}</Text>\n </Pressable>\n ))}\n </View>\n ) : null}\n </Pressable>\n ))}\n {replying ? (\n <View style={styles.replyBox}>\n <TextInput\n value={reply}\n onChangeText={setReply}\n placeholder=\"Reply…\"\n placeholderTextColor={palette.textFaint}\n autoFocus\n multiline\n style={[styles.replyInput, { color: palette.text, backgroundColor: palette.fill }]}\n />\n <Pressable\n accessibilityRole=\"button\"\n onPress={async () => {\n if (await onReply(reply)) {\n setReply('');\n setReplying(false);\n }\n }}\n disabled={!reply.trim()}\n style={[\n styles.smallBtn,\n { backgroundColor: palette.primary },\n !reply.trim() && styles.disabled,\n ]}\n >\n <Text style={[styles.smallBtnLabel, { color: palette.onPrimary }]}>Reply</Text>\n </Pressable>\n </View>\n ) : null}\n <View style={[styles.threadActions, { borderTopColor: palette.hairline }]}>\n <Pressable accessibilityRole=\"button\" onPress={() => setReplying((v) => !v)} hitSlop={6}>\n <Text style={[styles.action, { color: palette.primary }]}>{replying ? 'Cancel' : 'Reply'}</Text>\n </Pressable>\n <Pressable accessibilityRole=\"button\" onPress={onResolve} hitSlop={6}>\n <Text style={[styles.action, { color: palette.textMuted }]}>\n {thread.resolved ? 'Re-open' : 'Resolve'}\n </Text>\n </Pressable>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n quote: { fontSize: 14, marginHorizontal: 16, marginTop: 12, paddingLeft: 10, borderLeftWidth: 3 },\n tabs: { flexDirection: 'row', margin: 16, marginBottom: 4, padding: 3, borderRadius: 12 },\n tab: { flex: 1, alignItems: 'center', paddingVertical: 8, borderRadius: 9 },\n tabLabel: { fontSize: 14, fontWeight: '600' },\n message: { fontSize: 13, marginHorizontal: 16, marginTop: 8 },\n loading: { paddingVertical: 48, alignItems: 'center' },\n list: { padding: 16, paddingBottom: 24, gap: 12 },\n empty: { fontSize: 15, textAlign: 'center', paddingVertical: 40 },\n thread: { borderRadius: 16, overflow: 'hidden' },\n comment: { padding: 14, gap: 6 },\n reply: { paddingLeft: 30 },\n commentHead: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n avatar: { width: 24, height: 24, borderRadius: 12, alignItems: 'center', justifyContent: 'center' },\n avatarText: { fontSize: 12, fontWeight: '800' },\n author: { flexShrink: 1, fontSize: 14, fontWeight: '700' },\n time: { fontSize: 12 },\n body: { fontSize: 15, lineHeight: 21 },\n reactions: { flexDirection: 'row', flexWrap: 'wrap', gap: 6 },\n reaction: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 999,\n minHeight: 24,\n },\n reactionText: { fontSize: 13 },\n picker: { flexDirection: 'row', gap: 4 },\n pickerCell: { padding: 4 },\n pickerEmoji: { fontSize: 22 },\n replyBox: { flexDirection: 'row', alignItems: 'flex-end', gap: 8, paddingHorizontal: 14, paddingBottom: 10 },\n replyInput: {\n flex: 1,\n minHeight: 38,\n maxHeight: 120,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 10,\n fontSize: 15,\n },\n smallBtn: { paddingHorizontal: 14, height: 38, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n smallBtnLabel: { fontSize: 14, fontWeight: '700' },\n threadActions: {\n flexDirection: 'row',\n gap: 20,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n action: { fontSize: 14, fontWeight: '700' },\n composer: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 8,\n padding: 12,\n paddingBottom: 28,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n composerInput: {\n flex: 1,\n minHeight: 40,\n maxHeight: 140,\n paddingHorizontal: 12,\n paddingVertical: 10,\n borderRadius: 12,\n fontSize: 16,\n },\n send: { width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center' },\n disabled: { opacity: 0.45 },\n});\n"],"names":[],"mappings":"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"}
|