@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.
Files changed (227) hide show
  1. package/lib/features/agent-chat/NativeAgentChat.js +21 -4
  2. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  3. package/lib/features/chat/ApprovalCard.js +353 -0
  4. package/lib/features/chat/ApprovalCard.js.map +1 -0
  5. package/lib/features/chat/AskUserCard.js +9 -2
  6. package/lib/features/chat/AskUserCard.js.map +1 -1
  7. package/lib/features/chat/askUser.js +25 -3
  8. package/lib/features/chat/askUser.js.map +1 -1
  9. package/lib/features/chat/queuedFollowUpRows.js +13 -0
  10. package/lib/features/chat/queuedFollowUpRows.js.map +1 -0
  11. package/lib/features/dictate/DictateExperience.js +59 -7
  12. package/lib/features/dictate/DictateExperience.js.map +1 -1
  13. package/lib/features/dictate/components/NoteView.js +227 -12
  14. package/lib/features/dictate/components/NoteView.js.map +1 -1
  15. package/lib/features/dictate/dictateClient.js +93 -23
  16. package/lib/features/dictate/dictateClient.js.map +1 -1
  17. package/lib/features/dictate/dictatePreference.js +19 -0
  18. package/lib/features/dictate/dictatePreference.js.map +1 -0
  19. package/lib/features/dictate/noteText.js +17 -2
  20. package/lib/features/dictate/noteText.js.map +1 -1
  21. package/lib/features/dictate/privacy.js +96 -0
  22. package/lib/features/dictate/privacy.js.map +1 -0
  23. package/lib/features/dictate/shownNote.js +24 -0
  24. package/lib/features/dictate/shownNote.js.map +1 -0
  25. package/lib/features/discover/DiscoverArticle.js +105 -92
  26. package/lib/features/discover/DiscoverArticle.js.map +1 -1
  27. package/lib/features/discover/DiscoverFeed.js +97 -48
  28. package/lib/features/discover/DiscoverFeed.js.map +1 -1
  29. package/lib/features/discover/DiscoverFollowUp.js +135 -0
  30. package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
  31. package/lib/features/discover/DiscoverSidebar.js +555 -0
  32. package/lib/features/discover/DiscoverSidebar.js.map +1 -0
  33. package/lib/features/discover/DiscoverSkeletons.js +123 -0
  34. package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
  35. package/lib/features/discover/DiscoverStoryCards.js +193 -87
  36. package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
  37. package/lib/features/discover/followUpQuery.js +42 -0
  38. package/lib/features/discover/followUpQuery.js.map +1 -0
  39. package/lib/features/discover/markets.js +37 -0
  40. package/lib/features/discover/markets.js.map +1 -0
  41. package/lib/features/discover/useDiscoverSidebar.js +148 -0
  42. package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
  43. package/lib/features/discover/weather.js +42 -0
  44. package/lib/features/discover/weather.js.map +1 -0
  45. package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
  46. package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
  47. package/lib/features/inbox/InboxAgentChatPane.js +1 -1
  48. package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
  49. package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
  50. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
  51. package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
  52. package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
  53. package/lib/features/movies/MoviesAgentChatPane.js +1 -1
  54. package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
  55. package/lib/features/notion/NotionBlockSheets.js +206 -0
  56. package/lib/features/notion/NotionBlockSheets.js.map +1 -0
  57. package/lib/features/notion/NotionBlockView.js +36 -0
  58. package/lib/features/notion/NotionBlockView.js.map +1 -0
  59. package/lib/features/notion/NotionCommentsSheet.js +461 -0
  60. package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
  61. package/lib/features/notion/NotionConnectionsSheet.js +244 -0
  62. package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
  63. package/lib/features/notion/NotionHistorySheet.js +439 -0
  64. package/lib/features/notion/NotionHistorySheet.js.map +1 -0
  65. package/lib/features/notion/NotionMediaBlocks.js +803 -0
  66. package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
  67. package/lib/features/notion/NotionMentionSheet.js +279 -0
  68. package/lib/features/notion/NotionMentionSheet.js.map +1 -0
  69. package/lib/features/notion/NotionPageMenu.js +585 -0
  70. package/lib/features/notion/NotionPageMenu.js.map +1 -0
  71. package/lib/features/notion/NotionPageTree.js +220 -0
  72. package/lib/features/notion/NotionPageTree.js.map +1 -0
  73. package/lib/features/notion/NotionPageView.js +1253 -152
  74. package/lib/features/notion/NotionPageView.js.map +1 -1
  75. package/lib/features/notion/NotionShareSheet.js +606 -0
  76. package/lib/features/notion/NotionShareSheet.js.map +1 -0
  77. package/lib/features/notion/NotionSheets.js +87 -15
  78. package/lib/features/notion/NotionSheets.js.map +1 -1
  79. package/lib/features/notion/NotionSidebarSections.js +492 -0
  80. package/lib/features/notion/NotionSidebarSections.js.map +1 -0
  81. package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
  82. package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
  83. package/lib/features/notion/NotionWorkspaceView.js +257 -45
  84. package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
  85. package/lib/features/notion/database/DatabaseCells.js +554 -0
  86. package/lib/features/notion/database/DatabaseCells.js.map +1 -0
  87. package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
  88. package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
  89. package/lib/features/notion/database/DatabaseLayouts.js +461 -0
  90. package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
  91. package/lib/features/notion/database/DatabaseSheets.js +791 -0
  92. package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
  93. package/lib/features/notion/database/NotionDatabaseView.js +817 -0
  94. package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
  95. package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
  96. package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
  97. package/lib/features/notion/database/chartData.js +89 -0
  98. package/lib/features/notion/database/chartData.js.map +1 -0
  99. package/lib/features/notion/database/chartView.js +112 -0
  100. package/lib/features/notion/database/chartView.js.map +1 -0
  101. package/lib/features/notion/database/connectorButton.js +33 -0
  102. package/lib/features/notion/database/connectorButton.js.map +1 -0
  103. package/lib/features/notion/database/databaseCalc.js +208 -0
  104. package/lib/features/notion/database/databaseCalc.js.map +1 -0
  105. package/lib/features/notion/database/databaseCalendar.js +157 -0
  106. package/lib/features/notion/database/databaseCalendar.js.map +1 -0
  107. package/lib/features/notion/database/databaseCsv.js +98 -0
  108. package/lib/features/notion/database/databaseCsv.js.map +1 -0
  109. package/lib/features/notion/database/databaseCsvActions.js +58 -0
  110. package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
  111. package/lib/features/notion/database/databaseFilter.js +473 -0
  112. package/lib/features/notion/database/databaseFilter.js.map +1 -0
  113. package/lib/features/notion/database/databaseFormula.js +1072 -0
  114. package/lib/features/notion/database/databaseFormula.js.map +1 -0
  115. package/lib/features/notion/database/databaseGroup.js +151 -0
  116. package/lib/features/notion/database/databaseGroup.js.map +1 -0
  117. package/lib/features/notion/database/databaseRollup.js +58 -0
  118. package/lib/features/notion/database/databaseRollup.js.map +1 -0
  119. package/lib/features/notion/database/databaseTimeline.js +156 -0
  120. package/lib/features/notion/database/databaseTimeline.js.map +1 -0
  121. package/lib/features/notion/database/databaseView.js +1188 -0
  122. package/lib/features/notion/database/databaseView.js.map +1 -0
  123. package/lib/features/notion/database/databaseViews.js +310 -0
  124. package/lib/features/notion/database/databaseViews.js.map +1 -0
  125. package/lib/features/notion/database/relationSource.js +92 -0
  126. package/lib/features/notion/database/relationSource.js.map +1 -0
  127. package/lib/features/notion/database/uniqueId.js +17 -0
  128. package/lib/features/notion/database/uniqueId.js.map +1 -0
  129. package/lib/features/notion/database/useNotionDatabase.js +617 -0
  130. package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
  131. package/lib/features/notion/notionAgentRunStatus.js +39 -0
  132. package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
  133. package/lib/features/notion/notionCodeLanguages.js +112 -0
  134. package/lib/features/notion/notionCodeLanguages.js.map +1 -0
  135. package/lib/features/notion/notionComments.js +86 -0
  136. package/lib/features/notion/notionComments.js.map +1 -0
  137. package/lib/features/notion/notionConnections.js +74 -0
  138. package/lib/features/notion/notionConnections.js.map +1 -0
  139. package/lib/features/notion/notionDocuments.js +453 -1
  140. package/lib/features/notion/notionDocuments.js.map +1 -1
  141. package/lib/features/notion/notionEditorModel.js +142 -7
  142. package/lib/features/notion/notionEditorModel.js.map +1 -1
  143. package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
  144. package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
  145. package/lib/features/notion/notionMedia.js +119 -0
  146. package/lib/features/notion/notionMedia.js.map +1 -0
  147. package/lib/features/notion/notionMentionDate.js +32 -0
  148. package/lib/features/notion/notionMentionDate.js.map +1 -0
  149. package/lib/features/notion/notionMentionOptions.js +162 -0
  150. package/lib/features/notion/notionMentionOptions.js.map +1 -0
  151. package/lib/features/notion/notionNotesAgent.js +445 -0
  152. package/lib/features/notion/notionNotesAgent.js.map +1 -0
  153. package/lib/features/notion/notionPageAccess.js +168 -0
  154. package/lib/features/notion/notionPageAccess.js.map +1 -0
  155. package/lib/features/notion/notionPageActions.js +138 -0
  156. package/lib/features/notion/notionPageActions.js.map +1 -0
  157. package/lib/features/notion/notionPageHistory.js +154 -0
  158. package/lib/features/notion/notionPageHistory.js.map +1 -0
  159. package/lib/features/notion/notionPageKinds.js +200 -0
  160. package/lib/features/notion/notionPageKinds.js.map +1 -0
  161. package/lib/features/notion/notionRecents.js +48 -0
  162. package/lib/features/notion/notionRecents.js.map +1 -0
  163. package/lib/features/notion/notionRichText.js +177 -0
  164. package/lib/features/notion/notionRichText.js.map +1 -0
  165. package/lib/features/notion/notionRichTitle.js +336 -0
  166. package/lib/features/notion/notionRichTitle.js.map +1 -0
  167. package/lib/features/notion/useNotionWorkspace.js +272 -13
  168. package/lib/features/notion/useNotionWorkspace.js.map +1 -1
  169. package/lib/features/notion/usePageActions.js +155 -0
  170. package/lib/features/notion/usePageActions.js.map +1 -0
  171. package/lib/features/resume/ResumeAgentChatPane.js +1 -1
  172. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
  173. package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
  174. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
  175. package/lib/features/study/StudyAgentChatPane.js +1 -1
  176. package/lib/features/study/StudyAgentChatPane.js.map +1 -1
  177. package/lib/features/travel/TravelAgentChatPane.js +1 -1
  178. package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
  179. package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
  180. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  181. package/lib/features/webbuilder/buildFragments.js +1 -1
  182. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  183. package/lib/features/webbuilder/codeFiles.js +302 -0
  184. package/lib/features/webbuilder/codeFiles.js.map +1 -0
  185. package/lib/features/webbuilder/codeHighlight.js +209 -0
  186. package/lib/features/webbuilder/codeHighlight.js.map +1 -0
  187. package/lib/features/webbuilder/components/CodeView.js +682 -52
  188. package/lib/features/webbuilder/components/CodeView.js.map +1 -1
  189. package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
  190. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  191. package/lib/features/webbuilder/components/ProjectChat.js +3 -3
  192. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  193. package/lib/features/webbuilder/stepLabels.js +68 -0
  194. package/lib/features/webbuilder/stepLabels.js.map +1 -0
  195. package/lib/hooks/useHostChatSteering.js +45 -0
  196. package/lib/hooks/useHostChatSteering.js.map +1 -0
  197. package/lib/screens/Chat/index.js +2 -12
  198. package/lib/screens/Chat/index.js.map +1 -1
  199. package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
  200. package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
  201. package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
  202. package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
  203. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
  204. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  205. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
  206. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
  207. package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
  208. package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
  209. package/lib/screens/NotionPage/index.js +2 -2
  210. package/lib/screens/NotionPage/index.js.map +1 -1
  211. package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
  212. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  213. package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
  214. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  215. package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
  216. package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
  217. package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
  218. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  219. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
  220. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
  221. package/lib/screens/WebBuilderNative/index.js +1 -1
  222. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  223. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
  224. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  225. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
  226. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  227. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import {useState,useEffect,useMemo,useCallback}from'react';import {useApolloClient,useQuery}from'@apollo/client/index.js';import {NATIVE_NOTION_WORKSPACES,NATIVE_NOTION_CHILDREN,NATIVE_NOTION_CREATE_WORKSPACE,NATIVE_NOTION_CREATE_BLOCK}from'./notionDocuments.js';import {livePagesByRecent,meetingRowOf,pageKindOf,toTitleProperty,meetingEmbedChild,newMeetingProperties}from'./notionBlocks.js';import {isTemplateLibrary,buildTemplateCreatePlan}from'./notionTemplates.js';var __defProp = Object.defineProperty;
1
+ import {useState,useEffect,useMemo,useCallback}from'react';import {useApolloClient,useQuery}from'@apollo/client/index.js';import {NATIVE_NOTION_WORKSPACES,NATIVE_NOTION_CHILDREN,NATIVE_NOTION_CREATE_WORKSPACE,NATIVE_NOTION_CREATE_BLOCK,NATIVE_NOTION_FAVORITES,NATIVE_NOTION_SET_FAVORITES,NATIVE_NOTION_UPDATE_BLOCK,NATIVE_NOTION_DUPLICATE_BLOCK,NATIVE_NOTION_MOVE_BLOCK,NATIVE_NOTION_DELETE_BLOCK,NATIVE_NOTION_RESTORE_BLOCK,NATIVE_NOTION_DELETE_WORKSPACE}from'./notionDocuments.js';import {toggleFavorite}from'./notionPageActions.js';import {newBlockId}from'./notionEditorModel.js';import {NOTES_SETTINGS_FLAG,readTeamspaces,classifyRootNodes,agentRowOf,TEAMSPACES_KEY,newSettingsPageProperties,addTeamspace,sectionPatch,removeTeamspace,newSectionPageProperties}from'./notionPageKinds.js';import {templateInstructionBlocks,agentTemplate,templateAgentProperties}from'./notionNotesAgent.js';import {livePagesByRecent,pageKindOf,meetingRowOf,toTitleProperty,newMeetingProperties,meetingEmbedChild}from'./notionBlocks.js';import {isTemplateLibrary,buildTemplateCreatePlan}from'./notionTemplates.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -26,7 +26,7 @@ try {
26
26
  }
27
27
  const LAST_WORKSPACE_KEY = "yantra.notion.lastWorkspace.v1";
28
28
  function useNotionWorkspace() {
29
- var _a2, _b, _c;
29
+ var _a2, _b, _c, _d;
30
30
  const client = useApolloClient();
31
31
  const [selectedId, setSelectedId] = useState(null);
32
32
  const [remembered, setRemembered] = useState(void 0);
@@ -65,17 +65,48 @@ function useNotionWorkspace() {
65
65
  });
66
66
  const {
67
67
  pages,
68
+ myPages,
68
69
  meetings,
70
+ agents,
71
+ teamspaces,
72
+ teamspaceGroups,
73
+ settingsPageId,
69
74
  templateLibraryId
70
75
  } = useMemo(() => {
71
- var _a3, _b2, _c2, _d, _e;
76
+ var _a3, _b2, _c2, _d2, _e, _f;
72
77
  const roots = (_c2 = (_b2 = (_a3 = rootQuery.data) == null ? void 0 : _a3.getBlockChildren) == null ? void 0 : _b2.results) != null ? _c2 : [];
73
78
  const live = livePagesByRecent(roots);
74
79
  const now = Date.now();
80
+ const settings = roots.find((b) => {
81
+ var _a4;
82
+ return !b.inTrash && ((_a4 = b.properties) == null ? void 0 : _a4[NOTES_SETTINGS_FLAG]) === true;
83
+ });
84
+ const catalog = readTeamspaces(settings == null ? void 0 : settings.properties);
85
+ const nodes = live.map((b) => {
86
+ var _a4;
87
+ const p = (_a4 = b.properties) != null ? _a4 : {};
88
+ return {
89
+ id: b.id,
90
+ block: b,
91
+ kind: pageKindOf(p),
92
+ section: p.section === "teamspace" ? "teamspace" : "private",
93
+ teamspace: typeof p.teamspace === "string" ? p.teamspace : void 0
94
+ };
95
+ });
96
+ const sections = classifyRootNodes(nodes, catalog);
75
97
  return {
76
98
  pages: live.filter((b) => pageKindOf(b.properties) === "page"),
99
+ myPages: sections.myPages.map((n) => n.block),
77
100
  meetings: live.map((b) => meetingRowOf(b, now)).filter((r) => Boolean(r)),
78
- templateLibraryId: (_e = (_d = roots.find((b) => !b.inTrash && isTemplateLibrary(b.properties))) == null ? void 0 : _d.id) != null ? _e : null
101
+ agents: sections.agents.map((n) => agentRowOf(n.block, now)).filter((r) => Boolean(r)),
102
+ teamspaces: catalog,
103
+ teamspaceGroups: sections.teamspaces.map((g) => ({
104
+ teamspace: g.teamspace,
105
+ implicit: g.implicit,
106
+ pages: g.nodes.map((n) => n.block)
107
+ })),
108
+ settingsPageId: (_d2 = settings == null ? void 0 : settings.id) != null ? _d2 : null,
109
+ templateLibraryId: (_f = (_e = roots.find((b) => !b.inTrash && isTemplateLibrary(b.properties))) == null ? void 0 : _e.id) != null ? _f : null
79
110
  };
80
111
  }, [rootQuery.data]);
81
112
  const refetchRoots = useCallback(() => {
@@ -112,7 +143,8 @@ function useNotionWorkspace() {
112
143
  id: workspace.id
113
144
  }
114
145
  })
115
- }
146
+ },
147
+ errorPolicy: "none"
116
148
  });
117
149
  refetchRoots();
118
150
  return (_b2 = (_a3 = res.data) == null ? void 0 : _a3.createBlock) != null ? _b2 : null;
@@ -123,11 +155,22 @@ function useNotionWorkspace() {
123
155
  title: toTitleProperty(title)
124
156
  }
125
157
  }), [createRoot]);
126
- const createMeeting = useCallback(() => createRoot({
127
- type: "page",
128
- properties: newMeetingProperties(),
129
- children: [meetingEmbedChild()]
130
- }), [createRoot]);
158
+ const createMeeting = useCallback(() => {
159
+ const pageId = newBlockId();
160
+ return createRoot({
161
+ id: pageId,
162
+ type: "page",
163
+ properties: newMeetingProperties(),
164
+ children: [__spreadProps(__spreadValues({
165
+ id: newBlockId()
166
+ }, meetingEmbedChild()), {
167
+ parent: {
168
+ type: "block",
169
+ id: pageId
170
+ }
171
+ })]
172
+ });
173
+ }, [createRoot]);
131
174
  const createFromTemplate = useCallback(async (template) => {
132
175
  var _a3, _b2, _c2;
133
176
  if (!(workspace == null ? void 0 : workspace.id)) return null;
@@ -160,22 +203,238 @@ function useNotionWorkspace() {
160
203
  failedRows
161
204
  };
162
205
  }, [client, refetchRoots, workspace == null ? void 0 : workspace.id]);
206
+ const favoritesQuery = useQuery(NATIVE_NOTION_FAVORITES, {
207
+ variables: {
208
+ workspaceId: (_b = workspace == null ? void 0 : workspace.id) != null ? _b : ""
209
+ },
210
+ skip: !(workspace == null ? void 0 : workspace.id),
211
+ fetchPolicy: "cache-and-network"
212
+ });
213
+ const [localFavorites, setLocalFavorites] = useState(null);
214
+ useEffect(() => setLocalFavorites(null), [favoritesQuery.data, workspace == null ? void 0 : workspace.id]);
215
+ const favoriteIds = useMemo(() => {
216
+ var _a3, _b2;
217
+ return (_b2 = localFavorites != null ? localFavorites : (_a3 = favoritesQuery.data) == null ? void 0 : _a3.notionFavorites) != null ? _b2 : [];
218
+ }, [localFavorites, favoritesQuery.data]);
219
+ const toggleFavoritePage = useCallback(async (pageId) => {
220
+ if (!(workspace == null ? void 0 : workspace.id)) return;
221
+ const next = toggleFavorite(favoriteIds, pageId);
222
+ setLocalFavorites(next);
223
+ try {
224
+ await client.mutate({
225
+ mutation: NATIVE_NOTION_SET_FAVORITES,
226
+ variables: {
227
+ workspaceId: workspace.id,
228
+ blockIds: next
229
+ },
230
+ errorPolicy: "none"
231
+ });
232
+ await favoritesQuery.refetch();
233
+ } catch (err) {
234
+ setLocalFavorites(null);
235
+ throw err;
236
+ }
237
+ }, [client, favoriteIds, favoritesQuery, workspace == null ? void 0 : workspace.id]);
238
+ const mutateNow = useCallback(async (mutation, variables) => {
239
+ const res = await client.mutate({
240
+ mutation,
241
+ variables,
242
+ errorPolicy: "none"
243
+ });
244
+ client.refetchQueries({
245
+ include: ["NativeNotionChildren"]
246
+ }).catch(() => void 0);
247
+ return res.data;
248
+ }, [client]);
249
+ const renamePage = useCallback((pageId, title) => mutateNow(NATIVE_NOTION_UPDATE_BLOCK, {
250
+ input: {
251
+ id: pageId,
252
+ properties: {
253
+ title: toTitleProperty(title)
254
+ }
255
+ }
256
+ }), [mutateNow]);
257
+ const duplicatePage = useCallback(async (pageId) => {
258
+ var _a3;
259
+ const data = await mutateNow(NATIVE_NOTION_DUPLICATE_BLOCK, {
260
+ blockId: pageId,
261
+ includeChildren: true
262
+ });
263
+ return (_a3 = data == null ? void 0 : data.duplicateBlock) != null ? _a3 : null;
264
+ }, [mutateNow]);
265
+ const movePage = useCallback((pageId, toPageId) => {
266
+ if (!(workspace == null ? void 0 : workspace.id)) return Promise.resolve(null);
267
+ const newParent = toPageId ? {
268
+ type: "block",
269
+ id: toPageId
270
+ } : {
271
+ type: "workspace",
272
+ id: workspace.id
273
+ };
274
+ return mutateNow(NATIVE_NOTION_MOVE_BLOCK, {
275
+ input: {
276
+ blockId: pageId,
277
+ newParent
278
+ }
279
+ });
280
+ }, [mutateNow, workspace == null ? void 0 : workspace.id]);
281
+ const trashPage = useCallback((pageId) => mutateNow(NATIVE_NOTION_DELETE_BLOCK, {
282
+ blockId: pageId
283
+ }), [mutateNow]);
284
+ const restorePage = useCallback((pageId) => mutateNow(NATIVE_NOTION_RESTORE_BLOCK, {
285
+ blockId: pageId
286
+ }), [mutateNow]);
287
+ const createSubPage = useCallback(async (parentId) => {
288
+ var _a3, _b2;
289
+ const res = await client.mutate({
290
+ mutation: NATIVE_NOTION_CREATE_BLOCK,
291
+ variables: {
292
+ input: {
293
+ type: "page",
294
+ parent: {
295
+ type: "block",
296
+ id: parentId
297
+ },
298
+ properties: {
299
+ title: []
300
+ }
301
+ }
302
+ },
303
+ errorPolicy: "none"
304
+ });
305
+ client.refetchQueries({
306
+ include: ["NativeNotionChildren"]
307
+ }).catch(() => void 0);
308
+ return (_b2 = (_a3 = res.data) == null ? void 0 : _a3.createBlock) != null ? _b2 : null;
309
+ }, [client]);
310
+ const deleteWorkspace = useCallback(async (workspaceId) => {
311
+ var _a3, _b2;
312
+ await client.mutate({
313
+ mutation: NATIVE_NOTION_DELETE_WORKSPACE,
314
+ variables: {
315
+ workspaceId
316
+ },
317
+ errorPolicy: "none"
318
+ });
319
+ const res = await workspacesQuery.refetch();
320
+ const next = ((_b2 = (_a3 = res.data) == null ? void 0 : _a3.listWorkspaces) != null ? _b2 : []).find((w) => w.id !== workspaceId);
321
+ if (next) selectWorkspace(next.id);
322
+ }, [client, selectWorkspace, workspacesQuery]);
323
+ const saveTeamspaces = useCallback(async (next) => {
324
+ if (!(workspace == null ? void 0 : workspace.id)) return;
325
+ if (settingsPageId) {
326
+ await client.mutate({
327
+ mutation: NATIVE_NOTION_UPDATE_BLOCK,
328
+ variables: {
329
+ input: {
330
+ id: settingsPageId,
331
+ properties: {
332
+ [TEAMSPACES_KEY]: next
333
+ }
334
+ }
335
+ },
336
+ errorPolicy: "none"
337
+ });
338
+ } else {
339
+ await client.mutate({
340
+ mutation: NATIVE_NOTION_CREATE_BLOCK,
341
+ variables: {
342
+ input: {
343
+ type: "page",
344
+ parent: {
345
+ type: "workspace",
346
+ id: workspace.id
347
+ },
348
+ properties: newSettingsPageProperties(next)
349
+ }
350
+ },
351
+ errorPolicy: "none"
352
+ });
353
+ }
354
+ await rootQuery.refetch();
355
+ }, [client, rootQuery, settingsPageId, workspace == null ? void 0 : workspace.id]);
356
+ const addTeamspace$1 = useCallback((name, color) => saveTeamspaces(addTeamspace(teamspaces, __spreadValues({
357
+ name
358
+ }, color ? {
359
+ color
360
+ } : {}))), [saveTeamspaces, teamspaces]);
361
+ const moveToSection = useCallback(async (pageIds, teamspace) => {
362
+ await Promise.all(pageIds.map((id) => client.mutate({
363
+ mutation: NATIVE_NOTION_UPDATE_BLOCK,
364
+ variables: {
365
+ input: {
366
+ id,
367
+ properties: sectionPatch(teamspace)
368
+ }
369
+ },
370
+ errorPolicy: "none"
371
+ })));
372
+ await rootQuery.refetch();
373
+ }, [client, rootQuery]);
374
+ const removeTeamspace$1 = useCallback(async (id) => {
375
+ const group = teamspaceGroups.find((g) => g.teamspace.id === id);
376
+ if (group == null ? void 0 : group.pages.length) await moveToSection(group.pages.map((p) => p.id), null);
377
+ await saveTeamspaces(removeTeamspace(teamspaces, id));
378
+ }, [moveToSection, saveTeamspaces, teamspaceGroups, teamspaces]);
379
+ const createSectionPage = useCallback((teamspace) => createRoot({
380
+ type: "page",
381
+ properties: newSectionPageProperties(teamspace)
382
+ }), [createRoot]);
383
+ const createAgent = useCallback((template, teamspace = null) => {
384
+ const pageId = newBlockId();
385
+ const blocks = templateInstructionBlocks(agentTemplate(template));
386
+ return createRoot(__spreadValues({
387
+ id: pageId,
388
+ type: "page",
389
+ properties: templateAgentProperties(template, {
390
+ teamspace
391
+ })
392
+ }, blocks.length ? {
393
+ children: blocks.map((b) => __spreadProps(__spreadValues({
394
+ id: newBlockId()
395
+ }, b), {
396
+ parent: {
397
+ type: "block",
398
+ id: pageId
399
+ }
400
+ }))
401
+ } : {}));
402
+ }, [createRoot]);
163
403
  const refresh = useCallback(async () => {
164
- await Promise.all([workspacesQuery.refetch(), (workspace == null ? void 0 : workspace.id) ? rootQuery.refetch() : null]);
165
- }, [rootQuery, workspace == null ? void 0 : workspace.id, workspacesQuery]);
404
+ await Promise.all([workspacesQuery.refetch(), (workspace == null ? void 0 : workspace.id) ? rootQuery.refetch() : null, (workspace == null ? void 0 : workspace.id) ? favoritesQuery.refetch() : null]);
405
+ }, [favoritesQuery, rootQuery, workspace == null ? void 0 : workspace.id, workspacesQuery]);
166
406
  return {
167
407
  workspaces,
168
408
  workspace,
169
409
  selectWorkspace,
170
410
  pages,
411
+ myPages,
171
412
  meetings,
413
+ agents,
414
+ teamspaces,
415
+ teamspaceGroups,
416
+ addTeamspace: addTeamspace$1,
417
+ removeTeamspace: removeTeamspace$1,
418
+ moveToSection,
419
+ createSectionPage,
420
+ createAgent,
172
421
  templateLibraryId,
173
422
  loading: workspacesQuery.loading && !workspacesQuery.data || rootQuery.loading && !rootQuery.data,
174
- error: (_c = (_b = workspacesQuery.error) != null ? _b : rootQuery.error) != null ? _c : null,
423
+ error: (_d = (_c = workspacesQuery.error) != null ? _c : rootQuery.error) != null ? _d : null,
175
424
  createWorkspace,
176
425
  createPage,
177
426
  createMeeting,
178
427
  createFromTemplate,
428
+ favoriteIds,
429
+ toggleFavoritePage,
430
+ renamePage,
431
+ duplicatePage,
432
+ movePage,
433
+ trashPage,
434
+ restorePage,
435
+ createSubPage,
436
+ deleteWorkspace,
437
+ refetchWorkspaces: workspacesQuery.refetch,
179
438
  refresh
180
439
  };
181
440
  }export{useNotionWorkspace};//# sourceMappingURL=useNotionWorkspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNotionWorkspace.js","sources":["../../../src/features/notion/useNotionWorkspace.ts"],"sourcesContent":["/**\n * Workspace state for the native Notion surface - the web flow\n * (NotionWorkspaceFlow): list workspaces, pick the one used last (else the\n * first), load its root blocks and split them like the web sidebar (My pages,\n * Meetings, the hidden template library), create workspaces, pages, meetings\n * and pages from templates.\n */\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport {\n NATIVE_NOTION_CHILDREN,\n NATIVE_NOTION_CREATE_BLOCK,\n NATIVE_NOTION_CREATE_WORKSPACE,\n NATIVE_NOTION_WORKSPACES,\n} from './notionDocuments';\nimport {\n livePagesByRecent,\n meetingEmbedChild,\n meetingRowOf,\n newMeetingProperties,\n pageKindOf,\n toTitleProperty,\n type MeetingRow,\n type NotionBlock,\n type NotionWorkspace,\n} from './notionBlocks';\nimport { buildTemplateCreatePlan, isTemplateLibrary, type PageTemplate } from './notionTemplates';\n\ntype StorageLike = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n};\n\nlet AsyncStorage: StorageLike | null = null;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require\n AsyncStorage = require('@react-native-async-storage/async-storage').default ?? null;\n} catch {\n AsyncStorage = null;\n}\n\nconst LAST_WORKSPACE_KEY = 'yantra.notion.lastWorkspace.v1';\n\ntype CreatedBlock = { createBlock?: NotionBlock | null };\n\nexport function useNotionWorkspace() {\n const client = useApolloClient();\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [remembered, setRemembered] = useState<string | null | undefined>(undefined);\n\n useEffect(() => {\n let alive = true;\n (AsyncStorage?.getItem(LAST_WORKSPACE_KEY) ?? Promise.resolve(null))\n .catch(() => null)\n .then((id) => alive && setRemembered(id || null));\n return () => {\n alive = false;\n };\n }, []);\n\n const workspacesQuery = useQuery<{ listWorkspaces?: NotionWorkspace[] | null }>(NATIVE_NOTION_WORKSPACES, {\n fetchPolicy: 'cache-and-network',\n });\n const workspaces = useMemo(() => workspacesQuery.data?.listWorkspaces ?? [], [workspacesQuery.data]);\n\n const workspace = useMemo<NotionWorkspace | null>(() => {\n if (!workspaces.length) return null;\n const wanted = selectedId ?? remembered;\n return workspaces.find((w) => w.id === wanted) ?? workspaces[0];\n }, [workspaces, selectedId, remembered]);\n\n const selectWorkspace = useCallback((id: string) => {\n setSelectedId(id);\n AsyncStorage?.setItem(LAST_WORKSPACE_KEY, id).catch(() => undefined);\n }, []);\n\n const rootQuery = useQuery<{ getBlockChildren?: { results?: NotionBlock[] | null } | null }>(\n NATIVE_NOTION_CHILDREN,\n {\n variables: { blockId: workspace?.id ?? '', pageSize: 200 },\n skip: !workspace?.id,\n fetchPolicy: 'cache-and-network',\n },\n );\n\n const { pages, meetings, templateLibraryId } = useMemo(() => {\n const roots = rootQuery.data?.getBlockChildren?.results ?? [];\n const live = livePagesByRecent(roots);\n const now = Date.now();\n return {\n pages: live.filter((b) => pageKindOf(b.properties) === 'page'),\n meetings: live.map((b) => meetingRowOf(b, now)).filter((r): r is MeetingRow => Boolean(r)),\n templateLibraryId: roots.find((b) => !b.inTrash && isTemplateLibrary(b.properties))?.id ?? null,\n };\n }, [rootQuery.data]);\n\n const refetchRoots = useCallback(() => {\n rootQuery.refetch().catch(() => undefined);\n }, [rootQuery]);\n\n const createWorkspace = useCallback(\n async (name: string) => {\n const res = await client.mutate<{ createWorkspace?: NotionWorkspace | null }>({\n mutation: NATIVE_NOTION_CREATE_WORKSPACE,\n variables: {\n input: { name: name.trim() || 'Untitled workspace', icon: { type: 'emoji', emoji: '📒' } },\n },\n });\n const created = res.data?.createWorkspace;\n await workspacesQuery.refetch();\n if (created?.id) selectWorkspace(created.id);\n return created ?? null;\n },\n [client, selectWorkspace, workspacesQuery],\n );\n\n const createRoot = useCallback(\n async (input: Record<string, unknown>) => {\n if (!workspace?.id) return null;\n const res = await client.mutate<CreatedBlock>({\n mutation: NATIVE_NOTION_CREATE_BLOCK,\n variables: { input: { ...input, parent: { type: 'workspace', id: workspace.id } } },\n });\n refetchRoots();\n return res.data?.createBlock ?? null;\n },\n [client, refetchRoots, workspace?.id],\n );\n\n /** A new top-level page in the active workspace (web \"New page\"). */\n const createPage = useCallback(\n (title = '') => createRoot({ type: 'page', properties: { title: toTitleProperty(title) } }),\n [createRoot],\n );\n\n /** Web \"New meeting\": a meeting page with the meeting recorder widget inside. */\n const createMeeting = useCallback(\n () => createRoot({ type: 'page', properties: newMeetingProperties(), children: [meetingEmbedChild()] }),\n [createRoot],\n );\n\n /**\n * Web `createPageFromTemplate` (per-block path): one nested createBlock for the page,\n * then each database row parented to its database. Returns the new page id.\n */\n const createFromTemplate = useCallback(\n async (template: Pick<PageTemplate, 'root'>) => {\n if (!workspace?.id) return null;\n const plan = buildTemplateCreatePlan(template, { type: 'workspace', id: workspace.id });\n const res = await client.mutate<CreatedBlock>({\n mutation: NATIVE_NOTION_CREATE_BLOCK,\n variables: { input: plan.root },\n });\n let failedRows = 0;\n // Sequential on purpose: rows keep their template order.\n // eslint-disable-next-line no-restricted-syntax\n for (const row of plan.rows) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await client.mutate({ mutation: NATIVE_NOTION_CREATE_BLOCK, variables: { input: row } });\n } catch {\n failedRows += 1;\n }\n }\n refetchRoots();\n return { id: String(res.data?.createBlock?.id ?? plan.rootId), failedRows };\n },\n [client, refetchRoots, workspace?.id],\n );\n\n const refresh = useCallback(async () => {\n await Promise.all([workspacesQuery.refetch(), workspace?.id ? rootQuery.refetch() : null]);\n }, [rootQuery, workspace?.id, workspacesQuery]);\n\n return {\n workspaces,\n workspace,\n selectWorkspace,\n pages,\n meetings,\n templateLibraryId,\n loading: (workspacesQuery.loading && !workspacesQuery.data) || (rootQuery.loading && !rootQuery.data),\n error: workspacesQuery.error ?? rootQuery.error ?? null,\n createWorkspace,\n createPage,\n createMeeting,\n createFromTemplate,\n refresh,\n };\n}\n\nexport type NotionWorkspaceState = ReturnType<typeof useNotionWorkspace>;\n"],"names":["_a","_b","_c"],"mappings":"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"}
1
+ {"version":3,"file":"useNotionWorkspace.js","sources":["../../../src/features/notion/useNotionWorkspace.ts"],"sourcesContent":["/**\n * Workspace state for the native Notion surface - the web flow\n * (NotionWorkspaceFlow): list workspaces, pick the one used last (else the\n * first), load its root blocks and split them like the web sidebar (My pages,\n * Meetings, the hidden template library), create workspaces, pages, meetings\n * and pages from templates.\n */\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport {\n NATIVE_NOTION_CHILDREN,\n NATIVE_NOTION_CREATE_BLOCK,\n NATIVE_NOTION_CREATE_WORKSPACE,\n NATIVE_NOTION_DELETE_BLOCK,\n NATIVE_NOTION_DELETE_WORKSPACE,\n NATIVE_NOTION_DUPLICATE_BLOCK,\n NATIVE_NOTION_FAVORITES,\n NATIVE_NOTION_MOVE_BLOCK,\n NATIVE_NOTION_RESTORE_BLOCK,\n NATIVE_NOTION_SET_FAVORITES,\n NATIVE_NOTION_UPDATE_BLOCK,\n NATIVE_NOTION_WORKSPACES,\n} from './notionDocuments';\nimport { toggleFavorite } from './notionPageActions';\nimport { newBlockId } from './notionEditorModel';\nimport {\n NOTES_SETTINGS_FLAG,\n TEAMSPACES_KEY,\n addTeamspace as addTeamspaceEntry,\n agentRowOf,\n classifyRootNodes,\n newSectionPageProperties,\n newSettingsPageProperties,\n readTeamspaces,\n removeTeamspace as removeTeamspaceEntry,\n sectionPatch,\n type AgentSummaryRow,\n type TeamspaceDef,\n} from './notionPageKinds';\nimport {\n agentTemplate,\n templateAgentProperties,\n templateInstructionBlocks,\n type AgentTemplateId,\n} from './notionNotesAgent';\nimport {\n livePagesByRecent,\n meetingEmbedChild,\n meetingRowOf,\n newMeetingProperties,\n pageKindOf,\n toTitleProperty,\n type MeetingRow,\n type NotionBlock,\n type NotionWorkspace,\n} from './notionBlocks';\nimport { buildTemplateCreatePlan, isTemplateLibrary, type PageTemplate } from './notionTemplates';\n\ntype StorageLike = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n};\n\nlet AsyncStorage: StorageLike | null = null;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require\n AsyncStorage = require('@react-native-async-storage/async-storage').default ?? null;\n} catch {\n AsyncStorage = null;\n}\n\nconst LAST_WORKSPACE_KEY = 'yantra.notion.lastWorkspace.v1';\n\ntype CreatedBlock = { createBlock?: NotionBlock | null };\n\nexport function useNotionWorkspace() {\n const client = useApolloClient();\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [remembered, setRemembered] = useState<string | null | undefined>(undefined);\n\n useEffect(() => {\n let alive = true;\n (AsyncStorage?.getItem(LAST_WORKSPACE_KEY) ?? Promise.resolve(null))\n .catch(() => null)\n .then((id) => alive && setRemembered(id || null));\n return () => {\n alive = false;\n };\n }, []);\n\n const workspacesQuery = useQuery<{ listWorkspaces?: NotionWorkspace[] | null }>(NATIVE_NOTION_WORKSPACES, {\n fetchPolicy: 'cache-and-network',\n });\n const workspaces = useMemo(() => workspacesQuery.data?.listWorkspaces ?? [], [workspacesQuery.data]);\n\n const workspace = useMemo<NotionWorkspace | null>(() => {\n if (!workspaces.length) return null;\n const wanted = selectedId ?? remembered;\n return workspaces.find((w) => w.id === wanted) ?? workspaces[0];\n }, [workspaces, selectedId, remembered]);\n\n const selectWorkspace = useCallback((id: string) => {\n setSelectedId(id);\n AsyncStorage?.setItem(LAST_WORKSPACE_KEY, id).catch(() => undefined);\n }, []);\n\n const rootQuery = useQuery<{ getBlockChildren?: { results?: NotionBlock[] | null } | null }>(\n NATIVE_NOTION_CHILDREN,\n {\n variables: { blockId: workspace?.id ?? '', pageSize: 200 },\n skip: !workspace?.id,\n fetchPolicy: 'cache-and-network',\n },\n );\n\n const { pages, myPages, meetings, agents, teamspaces, teamspaceGroups, settingsPageId, templateLibraryId } =\n useMemo(() => {\n const roots = rootQuery.data?.getBlockChildren?.results ?? [];\n const live = livePagesByRecent(roots);\n const now = Date.now();\n // The hidden settings page holds the teamspace catalog (web notesSettings).\n const settings = roots.find(\n (b) => !b.inTrash && (b.properties as Record<string, unknown> | null)?.[NOTES_SETTINGS_FLAG] === true,\n );\n const catalog = readTeamspaces(settings?.properties as Record<string, unknown> | undefined);\n const nodes = live.map((b) => {\n const p = (b.properties ?? {}) as Record<string, unknown>;\n return {\n id: b.id,\n block: b,\n kind: pageKindOf(p),\n section: p.section === 'teamspace' ? ('teamspace' as const) : ('private' as const),\n teamspace: typeof p.teamspace === 'string' ? p.teamspace : undefined,\n };\n });\n const sections = classifyRootNodes(nodes, catalog);\n return {\n pages: live.filter((b) => pageKindOf(b.properties) === 'page'),\n myPages: sections.myPages.map((n) => n.block),\n meetings: live.map((b) => meetingRowOf(b, now)).filter((r): r is MeetingRow => Boolean(r)),\n agents: sections.agents\n .map((n) => agentRowOf(n.block, now))\n .filter((r): r is AgentSummaryRow => Boolean(r)),\n teamspaces: catalog,\n teamspaceGroups: sections.teamspaces.map((g) => ({\n teamspace: g.teamspace,\n implicit: g.implicit,\n pages: g.nodes.map((n) => n.block),\n })),\n settingsPageId: settings?.id ?? null,\n templateLibraryId: roots.find((b) => !b.inTrash && isTemplateLibrary(b.properties))?.id ?? null,\n };\n }, [rootQuery.data]);\n\n const refetchRoots = useCallback(() => {\n rootQuery.refetch().catch(() => undefined);\n }, [rootQuery]);\n\n const createWorkspace = useCallback(\n async (name: string) => {\n const res = await client.mutate<{ createWorkspace?: NotionWorkspace | null }>({\n mutation: NATIVE_NOTION_CREATE_WORKSPACE,\n variables: {\n input: { name: name.trim() || 'Untitled workspace', icon: { type: 'emoji', emoji: '📒' } },\n },\n });\n const created = res.data?.createWorkspace;\n await workspacesQuery.refetch();\n if (created?.id) selectWorkspace(created.id);\n return created ?? null;\n },\n [client, selectWorkspace, workspacesQuery],\n );\n\n const createRoot = useCallback(\n async (input: Record<string, unknown>) => {\n if (!workspace?.id) return null;\n const res = await client.mutate<CreatedBlock>({\n mutation: NATIVE_NOTION_CREATE_BLOCK,\n variables: { input: { ...input, parent: { type: 'workspace', id: workspace.id } } },\n errorPolicy: 'none',\n });\n refetchRoots();\n return res.data?.createBlock ?? null;\n },\n [client, refetchRoots, workspace?.id],\n );\n\n /** A new top-level page in the active workspace (web \"New page\"). */\n const createPage = useCallback(\n (title = '') => createRoot({ type: 'page', properties: { title: toTitleProperty(title) } }),\n [createRoot],\n );\n\n /** Web \"New meeting\": a meeting page with the meeting recorder widget inside. */\n /**\n * Web \"New meeting\": a meeting page with the meeting recorder widget inside. The page gets a\n * client id so the nested widget can name its parent (NotionCreateBlockInput.parent is required -\n * without it the server rejected the whole create with a 400).\n */\n const createMeeting = useCallback(() => {\n const pageId = newBlockId();\n return createRoot({\n id: pageId,\n type: 'page',\n properties: newMeetingProperties(),\n children: [{ id: newBlockId(), ...meetingEmbedChild(), parent: { type: 'block', id: pageId } }],\n });\n }, [createRoot]);\n\n /**\n * Web `createPageFromTemplate` (per-block path): one nested createBlock for the page,\n * then each database row parented to its database. Returns the new page id.\n */\n const createFromTemplate = useCallback(\n async (template: Pick<PageTemplate, 'root'>) => {\n if (!workspace?.id) return null;\n const plan = buildTemplateCreatePlan(template, { type: 'workspace', id: workspace.id });\n const res = await client.mutate<CreatedBlock>({\n mutation: NATIVE_NOTION_CREATE_BLOCK,\n variables: { input: plan.root },\n });\n let failedRows = 0;\n // Sequential on purpose: rows keep their template order.\n // eslint-disable-next-line no-restricted-syntax\n for (const row of plan.rows) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await client.mutate({ mutation: NATIVE_NOTION_CREATE_BLOCK, variables: { input: row } });\n } catch {\n failedRows += 1;\n }\n }\n refetchRoots();\n return { id: String(res.data?.createBlock?.id ?? plan.rootId), failedRows };\n },\n [client, refetchRoots, workspace?.id],\n );\n\n // ---- Favorites (web sidebar ★ section) ------------------------------------\n const favoritesQuery = useQuery<{ notionFavorites?: string[] | null }>(NATIVE_NOTION_FAVORITES, {\n variables: { workspaceId: workspace?.id ?? '' },\n skip: !workspace?.id,\n fetchPolicy: 'cache-and-network',\n });\n const [localFavorites, setLocalFavorites] = useState<string[] | null>(null);\n useEffect(() => setLocalFavorites(null), [favoritesQuery.data, workspace?.id]);\n const favoriteIds = useMemo(\n () => localFavorites ?? favoritesQuery.data?.notionFavorites ?? [],\n [localFavorites, favoritesQuery.data],\n );\n\n const toggleFavoritePage = useCallback(\n async (pageId: string) => {\n if (!workspace?.id) return;\n const next = toggleFavorite(favoriteIds, pageId);\n setLocalFavorites(next);\n try {\n await client.mutate({\n mutation: NATIVE_NOTION_SET_FAVORITES,\n variables: { workspaceId: workspace.id, blockIds: next },\n errorPolicy: 'none',\n });\n await favoritesQuery.refetch();\n } catch (err) {\n setLocalFavorites(null);\n throw err;\n }\n },\n [client, favoriteIds, favoritesQuery, workspace?.id],\n );\n\n // ---- Page actions (web sidebar row ••• / page •••) --------------------------\n const mutateNow = useCallback(\n async (mutation: Parameters<typeof client.mutate>[0]['mutation'], variables: Record<string, unknown>) => {\n const res = await client.mutate({ mutation, variables, errorPolicy: 'none' });\n client.refetchQueries({ include: ['NativeNotionChildren'] }).catch(() => undefined);\n return res.data as Record<string, any> | null | undefined;\n },\n [client],\n );\n\n const renamePage = useCallback(\n (pageId: string, title: string) =>\n mutateNow(NATIVE_NOTION_UPDATE_BLOCK, {\n input: { id: pageId, properties: { title: toTitleProperty(title) } },\n }),\n [mutateNow],\n );\n\n /** Duplicate with its content; returns the copy (web Duplicate, Undo = delete the copy). */\n const duplicatePage = useCallback(\n async (pageId: string) => {\n const data = await mutateNow(NATIVE_NOTION_DUPLICATE_BLOCK, { blockId: pageId, includeChildren: true });\n return (data?.duplicateBlock as NotionBlock | undefined) ?? null;\n },\n [mutateNow],\n );\n\n /** Move under another page, or to the workspace top level (`toPageId` null). */\n const movePage = useCallback(\n (pageId: string, toPageId: string | null) => {\n if (!workspace?.id) return Promise.resolve(null);\n const newParent = toPageId ? { type: 'block', id: toPageId } : { type: 'workspace', id: workspace.id };\n return mutateNow(NATIVE_NOTION_MOVE_BLOCK, { input: { blockId: pageId, newParent } });\n },\n [mutateNow, workspace?.id],\n );\n\n const trashPage = useCallback(\n (pageId: string) => mutateNow(NATIVE_NOTION_DELETE_BLOCK, { blockId: pageId }),\n [mutateNow],\n );\n\n const restorePage = useCallback(\n (pageId: string) => mutateNow(NATIVE_NOTION_RESTORE_BLOCK, { blockId: pageId }),\n [mutateNow],\n );\n\n /** Web \"New subpage\": an untitled page inside `parentId`. */\n const createSubPage = useCallback(\n async (parentId: string) => {\n const res = await client.mutate<CreatedBlock>({\n mutation: NATIVE_NOTION_CREATE_BLOCK,\n variables: {\n input: { type: 'page', parent: { type: 'block', id: parentId }, properties: { title: [] } },\n },\n errorPolicy: 'none',\n });\n client.refetchQueries({ include: ['NativeNotionChildren'] }).catch(() => undefined);\n return res.data?.createBlock ?? null;\n },\n [client],\n );\n\n /** Web workspace menu \"Move workspace to trash\"; picks another workspace after. */\n const deleteWorkspace = useCallback(\n async (workspaceId: string) => {\n await client.mutate({\n mutation: NATIVE_NOTION_DELETE_WORKSPACE,\n variables: { workspaceId },\n errorPolicy: 'none',\n });\n const res = await workspacesQuery.refetch();\n const next = (res.data?.listWorkspaces ?? []).find((w) => w.id !== workspaceId);\n if (next) selectWorkspace(next.id);\n },\n [client, selectWorkspace, workspacesQuery],\n );\n\n // ---- Teamspaces (web sidebar \"Add teamspace\"): catalog on the hidden settings page ----\n const saveTeamspaces = useCallback(\n async (next: TeamspaceDef[]) => {\n if (!workspace?.id) return;\n if (settingsPageId) {\n await client.mutate({\n mutation: NATIVE_NOTION_UPDATE_BLOCK,\n variables: { input: { id: settingsPageId, properties: { [TEAMSPACES_KEY]: next } } },\n errorPolicy: 'none',\n });\n } else {\n await client.mutate({\n mutation: NATIVE_NOTION_CREATE_BLOCK,\n variables: {\n input: {\n type: 'page',\n parent: { type: 'workspace', id: workspace.id },\n properties: newSettingsPageProperties(next),\n },\n },\n errorPolicy: 'none',\n });\n }\n await rootQuery.refetch();\n },\n [client, rootQuery, settingsPageId, workspace?.id],\n );\n\n const addTeamspace = useCallback(\n (name: string, color?: string) =>\n saveTeamspaces(addTeamspaceEntry(teamspaces, { name, ...(color ? { color } : {}) })),\n [saveTeamspaces, teamspaces],\n );\n\n /** Put top-level pages in a teamspace (null = My pages) - web \"Move to teamspace…\" (setPageTeamspace). */\n const moveToSection = useCallback(\n async (pageIds: string[], teamspace: string | null) => {\n await Promise.all(\n pageIds.map((id) =>\n client.mutate({\n mutation: NATIVE_NOTION_UPDATE_BLOCK,\n variables: { input: { id, properties: sectionPatch(teamspace) } },\n errorPolicy: 'none',\n }),\n ),\n );\n await rootQuery.refetch();\n },\n [client, rootQuery],\n );\n\n /** Remove a teamspace from the catalog; its pages go back to My pages. */\n const removeTeamspace = useCallback(\n async (id: string) => {\n const group = teamspaceGroups.find((g) => g.teamspace.id === id);\n if (group?.pages.length)\n await moveToSection(\n group.pages.map((p) => p.id),\n null,\n );\n await saveTeamspaces(removeTeamspaceEntry(teamspaces, id));\n },\n [moveToSection, saveTeamspaces, teamspaceGroups, teamspaces],\n );\n\n /** Web \"Add a page to <teamspace>\" (null = My pages). */\n const createSectionPage = useCallback(\n (teamspace: string | null) => createRoot({ type: 'page', properties: newSectionPageProperties(teamspace) }),\n [createRoot],\n );\n\n /** Web \"New agent\" from a template: an agent page plus its instruction blocks (nested, one call). */\n const createAgent = useCallback(\n (template: AgentTemplateId, teamspace: string | null = null) => {\n const pageId = newBlockId();\n const blocks = templateInstructionBlocks(agentTemplate(template));\n return createRoot({\n id: pageId,\n type: 'page',\n properties: templateAgentProperties(template, { teamspace }),\n ...(blocks.length\n ? {\n children: blocks.map((b) => ({\n id: newBlockId(),\n ...b,\n parent: { type: 'block', id: pageId },\n })),\n }\n : {}),\n });\n },\n [createRoot],\n );\n\n const refresh = useCallback(async () => {\n await Promise.all([\n workspacesQuery.refetch(),\n workspace?.id ? rootQuery.refetch() : null,\n workspace?.id ? favoritesQuery.refetch() : null,\n ]);\n }, [favoritesQuery, rootQuery, workspace?.id, workspacesQuery]);\n\n return {\n workspaces,\n workspace,\n selectWorkspace,\n pages,\n myPages,\n meetings,\n agents,\n teamspaces,\n teamspaceGroups,\n addTeamspace,\n removeTeamspace,\n moveToSection,\n createSectionPage,\n createAgent,\n templateLibraryId,\n loading: (workspacesQuery.loading && !workspacesQuery.data) || (rootQuery.loading && !rootQuery.data),\n error: workspacesQuery.error ?? rootQuery.error ?? null,\n createWorkspace,\n createPage,\n createMeeting,\n createFromTemplate,\n favoriteIds,\n toggleFavoritePage,\n renamePage,\n duplicatePage,\n movePage,\n trashPage,\n restorePage,\n createSubPage,\n deleteWorkspace,\n refetchWorkspaces: workspacesQuery.refetch,\n refresh,\n };\n}\n\nexport type NotionWorkspaceState = ReturnType<typeof useNotionWorkspace>;\n"],"names":["_a","_b","_c","_d","addTeamspace","addTeamspaceEntry","removeTeamspace","removeTeamspaceEntry"],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {useState,useCallback}from'react';import {Alert,Clipboard}from'react-native';import {pageTitle}from'./notionBlocks.js';import {serverErrorText,pageLinkUrl}from'./notionPageActions.js';import {useNotionToast,PageActionsSheet,TextPromptDialog,MoveToSheet,NotionToast}from'./NotionPageMenu.js';import {config}from'../../config/env-config.js';import {resolveMobileWebUrl,getPackagerHost}from'../../bridge/resolveMobileWebUrl.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ function webOrigin() {
18
+ return resolveMobileWebUrl(config.CLIENT_URL, getPackagerHost());
19
+ }
20
+ function usePageActions({
21
+ notion,
22
+ palette,
23
+ onOpenPage,
24
+ onTrashed,
25
+ extrasFor,
26
+ onRenamed
27
+ }) {
28
+ var _a, _b, _c, _d, _e, _f;
29
+ const {
30
+ toast,
31
+ show,
32
+ hide
33
+ } = useNotionToast();
34
+ const [target, setTarget] = useState(null);
35
+ const [extras, setExtras] = useState({});
36
+ const [menuOpen, setMenuOpen] = useState(false);
37
+ const [renaming, setRenaming] = useState(null);
38
+ const [moving, setMoving] = useState(null);
39
+ const fail = useCallback((what, err) => show({
40
+ message: `${what}. ${serverErrorText(err)}`
41
+ }), [show]);
42
+ const open = useCallback((page, more = {}) => {
43
+ setTarget(page);
44
+ setExtras(more);
45
+ setMenuOpen(true);
46
+ }, []);
47
+ const actionsFor = (page) => {
48
+ var _a2;
49
+ const favorite = notion.favoriteIds.includes(page.id);
50
+ return [[{
51
+ key: "favorite",
52
+ label: favorite ? "Remove from Favorites" : "Add to Favorites",
53
+ icon: favorite ? "star" : "star-outline",
54
+ onPress: () => notion.toggleFavoritePage(page.id).then(() => show({
55
+ message: favorite ? "Removed from Favorites" : "Added to Favorites"
56
+ })).catch((e) => fail("Couldn't update Favorites", e))
57
+ }, {
58
+ key: "subpage",
59
+ label: "New subpage",
60
+ icon: "add-circle-outline",
61
+ onPress: () => notion.createSubPage(page.id).then((created) => (created == null ? void 0 : created.id) && onOpenPage(created.id)).catch((e) => fail("Couldn't create the subpage", e))
62
+ }, {
63
+ key: "rename",
64
+ label: "Rename",
65
+ icon: "create-outline",
66
+ onPress: () => setRenaming(page)
67
+ }, {
68
+ key: "duplicate",
69
+ label: "Duplicate",
70
+ icon: "copy-outline",
71
+ onPress: () => notion.duplicatePage(page.id).then((copy) => show(__spreadValues({
72
+ message: `Duplicated \u201C${pageTitle(page)}\u201D`
73
+ }, (copy == null ? void 0 : copy.id) ? {
74
+ actionLabel: "Undo",
75
+ onAction: () => {
76
+ notion.trashPage(copy.id).catch((e) => fail("Couldn't undo", e));
77
+ }
78
+ } : {}))).catch((e) => fail("Couldn't duplicate", e))
79
+ }, {
80
+ key: "move",
81
+ label: "Move to\u2026",
82
+ icon: "return-up-forward-outline",
83
+ onPress: () => setMoving(page)
84
+ }, ...notion.teamspaces.length && notion.pages.some((p) => p.id === page.id) ? [{
85
+ key: "teamspace",
86
+ label: "Move to teamspace\u2026",
87
+ icon: "people-outline",
88
+ onPress: () => Alert.alert("Move to teamspace", pageTitle(page), [...notion.teamspaces.map((t) => ({
89
+ text: t.name,
90
+ onPress: () => {
91
+ notion.moveToSection([page.id], t.name).then(() => show({
92
+ message: `Moved to ${t.name}`
93
+ })).catch((e) => fail("Couldn't move the page", e));
94
+ }
95
+ })), {
96
+ text: "My pages",
97
+ onPress: () => {
98
+ notion.moveToSection([page.id], null).then(() => show({
99
+ message: "Moved to My pages"
100
+ })).catch((e) => fail("Couldn't move the page", e));
101
+ }
102
+ }, {
103
+ text: "Cancel",
104
+ style: "cancel"
105
+ }])
106
+ }] : [], {
107
+ key: "link",
108
+ label: "Copy link",
109
+ icon: "link-outline",
110
+ onPress: () => {
111
+ Clipboard.setString(pageLinkUrl(webOrigin(), page.id));
112
+ show({
113
+ message: "Link copied"
114
+ });
115
+ }
116
+ }], ...(_a2 = live.groups) != null ? _a2 : [], [{
117
+ key: "trash",
118
+ label: "Move to trash",
119
+ icon: "trash-outline",
120
+ destructive: true,
121
+ onPress: () => notion.trashPage(page.id).then(() => {
122
+ onTrashed == null ? void 0 : onTrashed(page.id);
123
+ show({
124
+ message: `Moved \u201C${pageTitle(page)}\u201D to Trash`,
125
+ actionLabel: "Undo",
126
+ onAction: () => {
127
+ notion.restorePage(page.id).catch((e) => fail("Couldn't restore", e));
128
+ }
129
+ });
130
+ }).catch((e) => fail("Couldn't move to Trash", e))
131
+ }]];
132
+ };
133
+ const live = target ? (_a = extrasFor == null ? void 0 : extrasFor(target)) != null ? _a : extras : extras;
134
+ const element = /* @__PURE__ */ jsxs(Fragment, { children: [
135
+ target ? /* @__PURE__ */ jsx(PageActionsSheet, { visible: menuOpen, palette, title: pageTitle(target), subtitle: live.subtitle, groups: actionsFor(target), pageSettings: live.pageSettings, onClose: () => setMenuOpen(false) }) : null,
136
+ /* @__PURE__ */ jsx(TextPromptDialog, { visible: Boolean(renaming), palette, title: "Rename page", initial: renaming ? pageTitle(renaming).replace(/^Untitled$/, "") : "", placeholder: "Untitled", confirmLabel: "Rename", allowEmpty: true, onClose: () => setRenaming(null), onConfirm: async (title) => {
137
+ if (!renaming) return;
138
+ await notion.renamePage(renaming.id, title.trim());
139
+ onRenamed == null ? void 0 : onRenamed(renaming.id, title.trim());
140
+ } }),
141
+ /* @__PURE__ */ jsx(MoveToSheet, { visible: Boolean(moving), palette, pageId: (_b = moving == null ? void 0 : moving.id) != null ? _b : null, pages: notion.pages, workspaceName: (_d = (_c = notion.workspace) == null ? void 0 : _c.name) != null ? _d : "Workspace", workspaceId: (_f = (_e = notion.workspace) == null ? void 0 : _e.id) != null ? _f : null, onClose: () => setMoving(null), onMove: async (to) => {
142
+ if (!moving) return;
143
+ await notion.movePage(moving.id, to);
144
+ show({
145
+ message: `Moved \u201C${pageTitle(moving)}\u201D`
146
+ });
147
+ } }),
148
+ /* @__PURE__ */ jsx(NotionToast, { toast, palette, onHide: hide })
149
+ ] });
150
+ return {
151
+ open,
152
+ element,
153
+ showToast: show
154
+ };
155
+ }export{usePageActions,webOrigin};//# sourceMappingURL=usePageActions.js.map