@nlabs/metropolisjs 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/.github/copilot-instructions.md +167 -0
  2. package/AGENTS.md +13 -0
  3. package/CHANGELOG.md +112 -0
  4. package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
  5. package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
  6. package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
  7. package/README.md +1123 -112
  8. package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
  9. package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
  10. package/docs/ACTIONS.md +63 -0
  11. package/docs/COLLECTIONS.md +1038 -0
  12. package/docs/CONNECTIONS.md +1367 -0
  13. package/docs/CRUD_INTEGRATION.md +702 -0
  14. package/examples/connections-usage.tsx +909 -0
  15. package/examples/content-actions-usage.ts +144 -0
  16. package/examples/crud-usage.tsx +847 -0
  17. package/examples/extensibility-usage.tsx +889 -0
  18. package/examples/i18n-import-examples.ts +86 -0
  19. package/examples/i18n-namespace-usage.ts +118 -0
  20. package/examples/i18next-singleton-demo.ts +187 -0
  21. package/examples/permission-system-usage.tsx +415 -0
  22. package/examples/project-details.tsx +397 -0
  23. package/examples/shared-i18n-usage.tsx +203 -0
  24. package/examples/signup-error-handling.ts +100 -0
  25. package/examples/translation-types.ts +86 -0
  26. package/examples/translation-usage.tsx +336 -0
  27. package/index.js +1 -0
  28. package/jest.config.mjs +28 -0
  29. package/lex.config.mjs +11 -2
  30. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
  31. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
  32. package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
  33. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
  34. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
  35. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
  36. package/lib/actions/appActions/appActions.d.ts +29 -0
  37. package/lib/actions/appActions/appActions.d.ts.map +1 -0
  38. package/lib/actions/appActions/appActions.js +159 -0
  39. package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
  40. package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
  41. package/lib/actions/connectionActions/connectionActions.js +131 -0
  42. package/lib/actions/contentActions/contentActions.d.ts +34 -0
  43. package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
  44. package/lib/actions/contentActions/contentActions.js +314 -0
  45. package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
  46. package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
  47. package/lib/actions/conversationActions/conversationActions.js +225 -0
  48. package/lib/actions/eventActions/eventActions.d.ts +27 -7
  49. package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
  50. package/lib/actions/eventActions/eventActions.js +436 -2
  51. package/lib/actions/groupActions/groupActions.d.ts +30 -0
  52. package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
  53. package/lib/actions/groupActions/groupActions.js +229 -0
  54. package/lib/actions/imageActions/imageActions.d.ts +16 -10
  55. package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
  56. package/lib/actions/imageActions/imageActions.js +593 -2
  57. package/lib/actions/index.d.ts +21 -9
  58. package/lib/actions/index.d.ts.map +1 -0
  59. package/lib/actions/index.js +22 -2
  60. package/lib/actions/locationActions/locationActions.d.ts +11 -9
  61. package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
  62. package/lib/actions/locationActions/locationActions.js +388 -2
  63. package/lib/actions/messageActions/messageActions.d.ts +16 -32
  64. package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
  65. package/lib/actions/messageActions/messageActions.js +235 -2
  66. package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
  67. package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
  68. package/lib/actions/permissionActions/permissionActions.js +330 -0
  69. package/lib/actions/personaActions/personaActions.d.ts +65 -0
  70. package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
  71. package/lib/actions/personaActions/personaActions.js +572 -0
  72. package/lib/actions/postActions/postActions.d.ts +12 -32
  73. package/lib/actions/postActions/postActions.d.ts.map +1 -0
  74. package/lib/actions/postActions/postActions.js +447 -2
  75. package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
  76. package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
  77. package/lib/actions/reactionActions/reactionActions.js +413 -2
  78. package/lib/actions/sseActions/sseActions.d.ts +1 -0
  79. package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
  80. package/lib/actions/sseActions/sseActions.js +148 -2
  81. package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
  82. package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
  83. package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
  84. package/lib/actions/tagActions/tagActions.d.ts +13 -31
  85. package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
  86. package/lib/actions/tagActions/tagActions.js +347 -2
  87. package/lib/actions/translationActions/translationActions.d.ts +38 -0
  88. package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
  89. package/lib/actions/translationActions/translationActions.js +189 -0
  90. package/lib/actions/userActions/userActions.d.ts +42 -95
  91. package/lib/actions/userActions/userActions.d.ts.map +1 -0
  92. package/lib/actions/userActions/userActions.js +844 -2
  93. package/lib/actions/videoActions/videoActions.d.ts +41 -0
  94. package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
  95. package/lib/actions/videoActions/videoActions.js +532 -0
  96. package/lib/actions/websocketActions/websocketActions.d.ts +20 -21
  97. package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
  98. package/lib/actions/websocketActions/websocketActions.js +377 -2
  99. package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
  100. package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
  101. package/lib/adapters/appAdapter/appAdapter.js +90 -0
  102. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +3 -2
  103. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
  104. package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
  105. package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
  106. package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
  107. package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
  108. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
  109. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
  110. package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
  111. package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
  112. package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
  113. package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
  114. package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
  115. package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
  116. package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
  117. package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
  118. package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
  119. package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
  120. package/lib/adapters/imageAdapter/imageAdapter.d.ts +9 -2
  121. package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
  122. package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
  123. package/lib/adapters/index.d.ts +34 -16
  124. package/lib/adapters/index.d.ts.map +1 -0
  125. package/lib/adapters/index.js +19 -2
  126. package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
  127. package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
  128. package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
  129. package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
  130. package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
  131. package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
  132. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
  133. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
  134. package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
  135. package/lib/adapters/personaAdapter/personaAdapter.d.ts +28 -2
  136. package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
  137. package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
  138. package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
  139. package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
  140. package/lib/adapters/postAdapter/postAdapter.js +115 -2
  141. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
  142. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
  143. package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
  144. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
  145. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
  146. package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
  147. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
  148. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
  149. package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
  150. package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
  151. package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
  152. package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
  153. package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
  154. package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
  155. package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
  156. package/lib/adapters/userAdapter/userAdapter.d.ts +18 -6
  157. package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
  158. package/lib/adapters/userAdapter/userAdapter.js +302 -2
  159. package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
  160. package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
  161. package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
  162. package/lib/config/index.d.ts +19 -6
  163. package/lib/config/index.d.ts.map +1 -0
  164. package/lib/config/index.js +97 -2
  165. package/lib/constants/Collections.d.ts +44 -0
  166. package/lib/constants/Collections.d.ts.map +1 -0
  167. package/lib/constants/Collections.js +40 -0
  168. package/lib/constants/MetropolisConstants.d.ts +1 -0
  169. package/lib/constants/MetropolisConstants.d.ts.map +1 -0
  170. package/lib/constants/MetropolisConstants.js +15 -2
  171. package/lib/graphql/message.d.ts +1 -0
  172. package/lib/graphql/message.d.ts.map +1 -0
  173. package/lib/graphql/message.js +6 -4
  174. package/lib/graphql/notification.d.ts +1 -0
  175. package/lib/graphql/notification.d.ts.map +1 -0
  176. package/lib/graphql/notification.js +6 -4
  177. package/lib/graphql/session.d.ts +1 -0
  178. package/lib/graphql/session.d.ts.map +1 -0
  179. package/lib/graphql/session.js +4 -3
  180. package/lib/index.d.ts +45 -22
  181. package/lib/index.d.ts.map +1 -0
  182. package/lib/index.js +248 -2
  183. package/lib/stores/appStore.d.ts +1 -0
  184. package/lib/stores/appStore.d.ts.map +1 -0
  185. package/lib/stores/appStore.js +23 -2
  186. package/lib/stores/contentStore.d.ts +36 -0
  187. package/lib/stores/contentStore.d.ts.map +1 -0
  188. package/lib/stores/contentStore.js +139 -0
  189. package/lib/stores/conversationStore.d.ts +38 -0
  190. package/lib/stores/conversationStore.d.ts.map +1 -0
  191. package/lib/stores/conversationStore.js +117 -0
  192. package/lib/stores/eventStore.d.ts +4 -1
  193. package/lib/stores/eventStore.d.ts.map +1 -0
  194. package/lib/stores/eventStore.js +47 -2
  195. package/lib/stores/groupStore.d.ts +37 -0
  196. package/lib/stores/groupStore.d.ts.map +1 -0
  197. package/lib/stores/groupStore.js +68 -0
  198. package/lib/stores/imageStore.d.ts +6 -1
  199. package/lib/stores/imageStore.d.ts.map +1 -0
  200. package/lib/stores/imageStore.js +53 -2
  201. package/lib/stores/index.d.ts +20 -11
  202. package/lib/stores/index.d.ts.map +1 -0
  203. package/lib/stores/index.js +24 -2
  204. package/lib/stores/locationStore.d.ts +2 -1
  205. package/lib/stores/locationStore.d.ts.map +1 -0
  206. package/lib/stores/locationStore.js +42 -2
  207. package/lib/stores/messageStore.d.ts +19 -4
  208. package/lib/stores/messageStore.d.ts.map +1 -0
  209. package/lib/stores/messageStore.js +137 -2
  210. package/lib/stores/notificationStore.d.ts +33 -0
  211. package/lib/stores/notificationStore.d.ts.map +1 -0
  212. package/lib/stores/notificationStore.js +55 -0
  213. package/lib/stores/permissionStore.d.ts +37 -0
  214. package/lib/stores/permissionStore.d.ts.map +1 -0
  215. package/lib/stores/permissionStore.js +117 -0
  216. package/lib/stores/personaStore.d.ts +26 -0
  217. package/lib/stores/personaStore.d.ts.map +1 -0
  218. package/lib/stores/personaStore.js +118 -0
  219. package/lib/stores/postStore.d.ts +2 -1
  220. package/lib/stores/postStore.d.ts.map +1 -0
  221. package/lib/stores/postStore.js +53 -2
  222. package/lib/stores/reactionStore.d.ts +1 -0
  223. package/lib/stores/reactionStore.d.ts.map +1 -0
  224. package/lib/stores/reactionStore.js +28 -2
  225. package/lib/stores/subscriptionStore.d.ts +41 -0
  226. package/lib/stores/subscriptionStore.d.ts.map +1 -0
  227. package/lib/stores/subscriptionStore.js +85 -0
  228. package/lib/stores/tagStore.d.ts +8 -5
  229. package/lib/stores/tagStore.d.ts.map +1 -0
  230. package/lib/stores/tagStore.js +87 -2
  231. package/lib/stores/translationStore.d.ts +42 -0
  232. package/lib/stores/translationStore.d.ts.map +1 -0
  233. package/lib/stores/translationStore.js +122 -0
  234. package/lib/stores/userStore.d.ts +5 -4
  235. package/lib/stores/userStore.d.ts.map +1 -0
  236. package/lib/stores/userStore.js +319 -2
  237. package/lib/stores/videoStore.d.ts +39 -0
  238. package/lib/stores/videoStore.d.ts.map +1 -0
  239. package/lib/stores/videoStore.js +132 -0
  240. package/lib/stores/websocketStore.d.ts +1 -0
  241. package/lib/stores/websocketStore.d.ts.map +1 -0
  242. package/lib/stores/websocketStore.js +51 -2
  243. package/lib/types/apps.types.d.ts +17 -0
  244. package/lib/types/apps.types.d.ts.map +1 -0
  245. package/lib/types/apps.types.js +6 -0
  246. package/lib/types/common.types.d.ts +31 -0
  247. package/lib/types/common.types.d.ts.map +1 -0
  248. package/lib/types/common.types.js +6 -0
  249. package/lib/types/conversations.types.d.ts +17 -0
  250. package/lib/types/conversations.types.d.ts.map +1 -0
  251. package/lib/types/conversations.types.js +6 -0
  252. package/lib/types/edges.types.d.ts +38 -0
  253. package/lib/types/edges.types.d.ts.map +1 -0
  254. package/lib/types/edges.types.js +6 -0
  255. package/lib/types/groups.types.d.ts +19 -0
  256. package/lib/types/groups.types.d.ts.map +1 -0
  257. package/lib/types/groups.types.js +6 -0
  258. package/lib/types/index.d.ts +12 -0
  259. package/lib/types/index.d.ts.map +1 -0
  260. package/lib/types/index.js +12 -0
  261. package/lib/types/subscriptions.types.d.ts +32 -0
  262. package/lib/types/subscriptions.types.d.ts.map +1 -0
  263. package/lib/types/subscriptions.types.js +6 -0
  264. package/lib/types/videos.types.d.ts +61 -0
  265. package/lib/types/videos.types.d.ts.map +1 -0
  266. package/lib/types/videos.types.js +6 -0
  267. package/lib/utils/MetropolisProvider.d.ts +39 -15
  268. package/lib/utils/MetropolisProvider.d.ts.map +1 -0
  269. package/lib/utils/MetropolisProvider.js +31 -2
  270. package/lib/utils/actionFactory.d.ts +21 -19
  271. package/lib/utils/actionFactory.d.ts.map +1 -0
  272. package/lib/utils/actionFactory.js +95 -2
  273. package/lib/utils/api.d.ts +5 -4
  274. package/lib/utils/api.d.ts.map +1 -0
  275. package/lib/utils/api.js +252 -6
  276. package/lib/utils/app.d.ts +1 -0
  277. package/lib/utils/app.d.ts.map +1 -0
  278. package/lib/utils/app.js +15 -2
  279. package/lib/utils/baseActionFactory.d.ts +5 -23
  280. package/lib/utils/baseActionFactory.d.ts.map +1 -0
  281. package/lib/utils/baseActionFactory.js +72 -2
  282. package/lib/utils/configUtils.d.ts +11 -0
  283. package/lib/utils/configUtils.d.ts.map +1 -0
  284. package/lib/utils/configUtils.js +20 -0
  285. package/lib/utils/dateUtils.d.ts +1 -0
  286. package/lib/utils/dateUtils.d.ts.map +1 -0
  287. package/lib/utils/dateUtils.js +11 -2
  288. package/lib/utils/file.d.ts +3 -1
  289. package/lib/utils/file.d.ts.map +1 -0
  290. package/lib/utils/file.js +156 -2
  291. package/lib/utils/i18n.d.ts +7 -0
  292. package/lib/utils/i18n.d.ts.map +1 -0
  293. package/lib/utils/i18n.js +96 -0
  294. package/lib/utils/index.d.ts +20 -0
  295. package/lib/utils/index.d.ts.map +1 -0
  296. package/lib/utils/index.js +26 -0
  297. package/lib/utils/location.d.ts +4 -3
  298. package/lib/utils/location.d.ts.map +1 -0
  299. package/lib/utils/location.js +82 -2
  300. package/lib/utils/permissionUtils.d.ts +22 -0
  301. package/lib/utils/permissionUtils.d.ts.map +1 -0
  302. package/lib/utils/permissionUtils.js +72 -0
  303. package/lib/utils/requestCache.d.ts +8 -0
  304. package/lib/utils/requestCache.d.ts.map +1 -0
  305. package/lib/utils/requestCache.js +53 -0
  306. package/lib/utils/session.d.ts +14 -0
  307. package/lib/utils/session.d.ts.map +1 -0
  308. package/lib/utils/session.js +107 -0
  309. package/lib/utils/useConversationTyping.d.ts +26 -0
  310. package/lib/utils/useConversationTyping.d.ts.map +1 -0
  311. package/lib/utils/useConversationTyping.js +117 -0
  312. package/lib/utils/useMetropolis.d.ts +67 -12
  313. package/lib/utils/useMetropolis.d.ts.map +1 -0
  314. package/lib/utils/useMetropolis.js +311 -2
  315. package/lib/utils/useTranslations.d.ts +16 -0
  316. package/lib/utils/useTranslations.d.ts.map +1 -0
  317. package/lib/utils/useTranslations.js +105 -0
  318. package/lib/utils/validatorFactory.d.ts +3 -2
  319. package/lib/utils/validatorFactory.d.ts.map +1 -0
  320. package/lib/utils/validatorFactory.js +95 -2
  321. package/package.json +58 -17
  322. package/temp_signin.ts +73 -0
  323. package/lib/actions/profileActions/profileActions.d.ts +0 -50
  324. package/lib/actions/profileActions/profileActions.js +0 -2
  325. package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
  326. package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
  327. package/lib/stores/profileStore.d.ts +0 -24
  328. package/lib/stores/profileStore.js +0 -2
  329. /package/{FACTORY_PATTERN_GUIDE.md → factoryPatternGuide.md} +0 -0
@@ -0,0 +1,117 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ import { useWebsocketActions } from './useMetropolis.js';
3
+ const DEFAULT_DEBOUNCE_MS = 300;
4
+ const DEFAULT_IDLE_MS = 60000;
5
+ export const useConversationTyping = ({ debounceMs = DEFAULT_DEBOUNCE_MS, idleMs = DEFAULT_IDLE_MS } = {})=>{
6
+ const websocketActions = useWebsocketActions();
7
+ const typingTimeoutRef = useRef(null);
8
+ const typingDebounceRef = useRef(null);
9
+ const typingConversationIdRef = useRef('');
10
+ const typingOptionsRef = useRef({});
11
+ const typingStateRef = useRef(false);
12
+ const clearTypingTimer = useCallback(()=>{
13
+ if (typingTimeoutRef.current) {
14
+ clearTimeout(typingTimeoutRef.current);
15
+ typingTimeoutRef.current = null;
16
+ }
17
+ }, []);
18
+ const clearTypingDebounce = useCallback(()=>{
19
+ if (typingDebounceRef.current) {
20
+ clearTimeout(typingDebounceRef.current);
21
+ typingDebounceRef.current = null;
22
+ }
23
+ }, []);
24
+ const updateTypingState = useCallback((conversationId, isTyping, options = {})=>{
25
+ const previousConversationId = typingConversationIdRef.current;
26
+ const typingOptions = Object.keys(options).length ? options : typingOptionsRef.current;
27
+ typingOptionsRef.current = typingOptions;
28
+ if (previousConversationId && previousConversationId !== conversationId && typingStateRef.current) {
29
+ websocketActions.sendTyping(previousConversationId, false, typingOptions);
30
+ typingStateRef.current = false;
31
+ }
32
+ if (!conversationId) {
33
+ typingConversationIdRef.current = '';
34
+ typingStateRef.current = false;
35
+ return;
36
+ }
37
+ if (previousConversationId === conversationId && typingStateRef.current === isTyping) {
38
+ return;
39
+ }
40
+ websocketActions.sendTyping(conversationId, isTyping, typingOptions);
41
+ typingConversationIdRef.current = conversationId;
42
+ typingStateRef.current = isTyping;
43
+ }, [
44
+ websocketActions
45
+ ]);
46
+ const syncDraft = useCallback((conversationId, draft, options = {})=>{
47
+ typingOptionsRef.current = options;
48
+ clearTypingDebounce();
49
+ clearTypingTimer();
50
+ if (!conversationId) {
51
+ return;
52
+ }
53
+ if (draft.trim()) {
54
+ if (!typingStateRef.current || typingConversationIdRef.current !== conversationId) {
55
+ typingDebounceRef.current = setTimeout(()=>{
56
+ updateTypingState(conversationId, true, options);
57
+ typingDebounceRef.current = null;
58
+ }, debounceMs);
59
+ }
60
+ typingTimeoutRef.current = setTimeout(()=>{
61
+ updateTypingState(conversationId, false, options);
62
+ }, idleMs);
63
+ return;
64
+ }
65
+ updateTypingState(conversationId, false, options);
66
+ }, [
67
+ clearTypingDebounce,
68
+ clearTypingTimer,
69
+ debounceMs,
70
+ idleMs,
71
+ updateTypingState
72
+ ]);
73
+ const setConversation = useCallback((conversationId, options = {})=>{
74
+ clearTypingDebounce();
75
+ clearTypingTimer();
76
+ typingOptionsRef.current = options;
77
+ if (typingConversationIdRef.current && typingConversationIdRef.current !== conversationId && typingStateRef.current) {
78
+ websocketActions.sendTyping(typingConversationIdRef.current, false, typingOptionsRef.current);
79
+ typingStateRef.current = false;
80
+ }
81
+ typingConversationIdRef.current = conversationId;
82
+ if (!conversationId) {
83
+ typingStateRef.current = false;
84
+ }
85
+ }, [
86
+ clearTypingDebounce,
87
+ clearTypingTimer,
88
+ websocketActions
89
+ ]);
90
+ const stopTyping = useCallback((conversationId = typingConversationIdRef.current, options = {})=>{
91
+ clearTypingDebounce();
92
+ clearTypingTimer();
93
+ updateTypingState(conversationId, false, options);
94
+ }, [
95
+ clearTypingDebounce,
96
+ clearTypingTimer,
97
+ updateTypingState
98
+ ]);
99
+ useEffect(()=>{
100
+ return ()=>{
101
+ clearTypingDebounce();
102
+ clearTypingTimer();
103
+ updateTypingState(typingConversationIdRef.current, false, typingOptionsRef.current);
104
+ };
105
+ }, [
106
+ clearTypingDebounce,
107
+ clearTypingTimer,
108
+ updateTypingState
109
+ ]);
110
+ return {
111
+ setConversation,
112
+ stopTyping,
113
+ syncDraft
114
+ };
115
+ };
116
+
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvdXNlQ29udmVyc2F0aW9uVHlwaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7dXNlV2Vic29ja2V0QWN0aW9uc30gZnJvbSAnLi91c2VNZXRyb3BvbGlzLmpzJztcblxudHlwZSBUeXBpbmdVc2VyID0ge1xuICByZWFkb25seSBpbWFnZVVybD86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcGVyc29uYUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0aHVtYlVybD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvblR5cGluZ09wdGlvbnMgPSB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcnM/OiBUeXBpbmdVc2VyW107XG59O1xuXG5leHBvcnQgdHlwZSBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zID0ge1xuICByZWFkb25seSBkZWJvdW5jZU1zPzogbnVtYmVyO1xuICByZWFkb25seSBpZGxlTXM/OiBudW1iZXI7XG59O1xuXG5jb25zdCBERUZBVUxUX0RFQk9VTkNFX01TID0gMzAwO1xuY29uc3QgREVGQVVMVF9JRExFX01TID0gNjAwMDA7XG5cbmV4cG9ydCBjb25zdCB1c2VDb252ZXJzYXRpb25UeXBpbmcgPSAoe1xuICBkZWJvdW5jZU1zID0gREVGQVVMVF9ERUJPVU5DRV9NUyxcbiAgaWRsZU1zID0gREVGQVVMVF9JRExFX01TXG59OiBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qgd2Vic29ja2V0QWN0aW9ucyA9IHVzZVdlYnNvY2tldEFjdGlvbnMoKTtcbiAgY29uc3QgdHlwaW5nVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCB0eXBpbmdEZWJvdW5jZVJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCB0eXBpbmdDb252ZXJzYXRpb25JZFJlZiA9IHVzZVJlZignJyk7XG4gIGNvbnN0IHR5cGluZ09wdGlvbnNSZWYgPSB1c2VSZWY8Q29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucz4oe30pO1xuICBjb25zdCB0eXBpbmdTdGF0ZVJlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgY29uc3QgY2xlYXJUeXBpbmdUaW1lciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZih0eXBpbmdUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0eXBpbmdUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgdHlwaW5nVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCBjbGVhclR5cGluZ0RlYm91bmNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmKHR5cGluZ0RlYm91bmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0eXBpbmdEZWJvdW5jZVJlZi5jdXJyZW50KTtcbiAgICAgIHR5cGluZ0RlYm91bmNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IHVwZGF0ZVR5cGluZ1N0YXRlID0gdXNlQ2FsbGJhY2soKGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIGlzVHlwaW5nOiBib29sZWFuLCBvcHRpb25zOiBDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0NvbnZlcnNhdGlvbklkID0gdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudDtcbiAgICBjb25zdCB0eXBpbmdPcHRpb25zID0gT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID8gb3B0aW9ucyA6IHR5cGluZ09wdGlvbnNSZWYuY3VycmVudDtcbiAgICB0eXBpbmdPcHRpb25zUmVmLmN1cnJlbnQgPSB0eXBpbmdPcHRpb25zO1xuXG4gICAgaWYocHJldmlvdXNDb252ZXJzYXRpb25JZCAmJiBwcmV2aW91c0NvbnZlcnNhdGlvbklkICE9PSBjb252ZXJzYXRpb25JZCAmJiB0eXBpbmdTdGF0ZVJlZi5jdXJyZW50KSB7XG4gICAgICB3ZWJzb2NrZXRBY3Rpb25zLnNlbmRUeXBpbmcocHJldmlvdXNDb252ZXJzYXRpb25JZCwgZmFsc2UsIHR5cGluZ09wdGlvbnMpO1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmKCFjb252ZXJzYXRpb25JZCkge1xuICAgICAgdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCA9ICcnO1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKHByZXZpb3VzQ29udmVyc2F0aW9uSWQgPT09IGNvbnZlcnNhdGlvbklkICYmIHR5cGluZ1N0YXRlUmVmLmN1cnJlbnQgPT09IGlzVHlwaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2Vic29ja2V0QWN0aW9ucy5zZW5kVHlwaW5nKGNvbnZlcnNhdGlvbklkLCBpc1R5cGluZywgdHlwaW5nT3B0aW9ucyk7XG4gICAgdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHR5cGluZ1N0YXRlUmVmLmN1cnJlbnQgPSBpc1R5cGluZztcbiAgfSwgW3dlYnNvY2tldEFjdGlvbnNdKTtcblxuICBjb25zdCBzeW5jRHJhZnQgPSB1c2VDYWxsYmFjaygoY29udmVyc2F0aW9uSWQ6IHN0cmluZywgZHJhZnQ6IHN0cmluZywgb3B0aW9uczogQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgdHlwaW5nT3B0aW9uc1JlZi5jdXJyZW50ID0gb3B0aW9ucztcbiAgICBjbGVhclR5cGluZ0RlYm91bmNlKCk7XG4gICAgY2xlYXJUeXBpbmdUaW1lcigpO1xuXG4gICAgaWYoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYoZHJhZnQudHJpbSgpKSB7XG4gICAgICBpZighdHlwaW5nU3RhdGVSZWYuY3VycmVudCB8fCB0eXBpbmdDb252ZXJzYXRpb25JZFJlZi5jdXJyZW50ICE9PSBjb252ZXJzYXRpb25JZCkge1xuICAgICAgICB0eXBpbmdEZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlVHlwaW5nU3RhdGUoY29udmVyc2F0aW9uSWQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgICAgIHR5cGluZ0RlYm91bmNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9LCBkZWJvdW5jZU1zKTtcbiAgICAgIH1cblxuICAgICAgdHlwaW5nVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVR5cGluZ1N0YXRlKGNvbnZlcnNhdGlvbklkLCBmYWxzZSwgb3B0aW9ucyk7XG4gICAgICB9LCBpZGxlTXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVR5cGluZ1N0YXRlKGNvbnZlcnNhdGlvbklkLCBmYWxzZSwgb3B0aW9ucyk7XG4gIH0sIFtjbGVhclR5cGluZ0RlYm91bmNlLCBjbGVhclR5cGluZ1RpbWVyLCBkZWJvdW5jZU1zLCBpZGxlTXMsIHVwZGF0ZVR5cGluZ1N0YXRlXSk7XG5cbiAgY29uc3Qgc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soKGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIG9wdGlvbnM6IENvbnZlcnNhdGlvblR5cGluZ09wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNsZWFyVHlwaW5nRGVib3VuY2UoKTtcbiAgICBjbGVhclR5cGluZ1RpbWVyKCk7XG4gICAgdHlwaW5nT3B0aW9uc1JlZi5jdXJyZW50ID0gb3B0aW9ucztcblxuICAgIGlmKHR5cGluZ0NvbnZlcnNhdGlvbklkUmVmLmN1cnJlbnQgJiYgdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCAhPT0gY29udmVyc2F0aW9uSWQgJiYgdHlwaW5nU3RhdGVSZWYuY3VycmVudCkge1xuICAgICAgd2Vic29ja2V0QWN0aW9ucy5zZW5kVHlwaW5nKHR5cGluZ0NvbnZlcnNhdGlvbklkUmVmLmN1cnJlbnQsIGZhbHNlLCB0eXBpbmdPcHRpb25zUmVmLmN1cnJlbnQpO1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHR5cGluZ0NvbnZlcnNhdGlvbklkUmVmLmN1cnJlbnQgPSBjb252ZXJzYXRpb25JZDtcblxuICAgIGlmKCFjb252ZXJzYXRpb25JZCkge1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW2NsZWFyVHlwaW5nRGVib3VuY2UsIGNsZWFyVHlwaW5nVGltZXIsIHdlYnNvY2tldEFjdGlvbnNdKTtcblxuICBjb25zdCBzdG9wVHlwaW5nID0gdXNlQ2FsbGJhY2soKGNvbnZlcnNhdGlvbklkID0gdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCwgb3B0aW9uczogQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY2xlYXJUeXBpbmdEZWJvdW5jZSgpO1xuICAgIGNsZWFyVHlwaW5nVGltZXIoKTtcbiAgICB1cGRhdGVUeXBpbmdTdGF0ZShjb252ZXJzYXRpb25JZCwgZmFsc2UsIG9wdGlvbnMpO1xuICB9LCBbY2xlYXJUeXBpbmdEZWJvdW5jZSwgY2xlYXJUeXBpbmdUaW1lciwgdXBkYXRlVHlwaW5nU3RhdGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclR5cGluZ0RlYm91bmNlKCk7XG4gICAgICBjbGVhclR5cGluZ1RpbWVyKCk7XG4gICAgICB1cGRhdGVUeXBpbmdTdGF0ZSh0eXBpbmdDb252ZXJzYXRpb25JZFJlZi5jdXJyZW50LCBmYWxzZSwgdHlwaW5nT3B0aW9uc1JlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbY2xlYXJUeXBpbmdEZWJvdW5jZSwgY2xlYXJUeXBpbmdUaW1lciwgdXBkYXRlVHlwaW5nU3RhdGVdKTtcblxuICByZXR1cm4ge1xuICAgIHNldENvbnZlcnNhdGlvbixcbiAgICBzdG9wVHlwaW5nLFxuICAgIHN5bmNEcmFmdFxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVdlYnNvY2tldEFjdGlvbnMiLCJERUZBVUxUX0RFQk9VTkNFX01TIiwiREVGQVVMVF9JRExFX01TIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwiZGVib3VuY2VNcyIsImlkbGVNcyIsIndlYnNvY2tldEFjdGlvbnMiLCJ0eXBpbmdUaW1lb3V0UmVmIiwidHlwaW5nRGVib3VuY2VSZWYiLCJ0eXBpbmdDb252ZXJzYXRpb25JZFJlZiIsInR5cGluZ09wdGlvbnNSZWYiLCJ0eXBpbmdTdGF0ZVJlZiIsImNsZWFyVHlwaW5nVGltZXIiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0IiwiY2xlYXJUeXBpbmdEZWJvdW5jZSIsInVwZGF0ZVR5cGluZ1N0YXRlIiwiY29udmVyc2F0aW9uSWQiLCJpc1R5cGluZyIsIm9wdGlvbnMiLCJwcmV2aW91c0NvbnZlcnNhdGlvbklkIiwidHlwaW5nT3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJzZW5kVHlwaW5nIiwic3luY0RyYWZ0IiwiZHJhZnQiLCJ0cmltIiwic2V0VGltZW91dCIsInNldENvbnZlcnNhdGlvbiIsInN0b3BUeXBpbmciXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLFFBQU8sUUFBUTtBQUVyRCxTQUFRQyxtQkFBbUIsUUFBTyxxQkFBcUI7QUF3QnZELE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyxrQkFBa0I7QUFFeEIsT0FBTyxNQUFNQyx3QkFBd0IsQ0FBQyxFQUNwQ0MsYUFBYUgsbUJBQW1CLEVBQ2hDSSxTQUFTSCxlQUFlLEVBQ0ssR0FBRyxDQUFDLENBQUM7SUFDbEMsTUFBTUksbUJBQW1CTjtJQUN6QixNQUFNTyxtQkFBbUJSLE9BQTZDO0lBQ3RFLE1BQU1TLG9CQUFvQlQsT0FBNkM7SUFDdkUsTUFBTVUsMEJBQTBCVixPQUFPO0lBQ3ZDLE1BQU1XLG1CQUFtQlgsT0FBa0MsQ0FBQztJQUM1RCxNQUFNWSxpQkFBaUJaLE9BQU87SUFFOUIsTUFBTWEsbUJBQW1CZixZQUFZO1FBQ25DLElBQUdVLGlCQUFpQk0sT0FBTyxFQUFFO1lBQzNCQyxhQUFhUCxpQkFBaUJNLE9BQU87WUFDckNOLGlCQUFpQk0sT0FBTyxHQUFHO1FBQzdCO0lBQ0YsR0FBRyxFQUFFO0lBRUwsTUFBTUUsc0JBQXNCbEIsWUFBWTtRQUN0QyxJQUFHVyxrQkFBa0JLLE9BQU8sRUFBRTtZQUM1QkMsYUFBYU4sa0JBQWtCSyxPQUFPO1lBQ3RDTCxrQkFBa0JLLE9BQU8sR0FBRztRQUM5QjtJQUNGLEdBQUcsRUFBRTtJQUVMLE1BQU1HLG9CQUFvQm5CLFlBQVksQ0FBQ29CLGdCQUF3QkMsVUFBbUJDLFVBQXFDLENBQUMsQ0FBQztRQUN2SCxNQUFNQyx5QkFBeUJYLHdCQUF3QkksT0FBTztRQUM5RCxNQUFNUSxnQkFBZ0JDLE9BQU9DLElBQUksQ0FBQ0osU0FBU0ssTUFBTSxHQUFHTCxVQUFV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
@@ -1,12 +1,67 @@
1
- export declare const useMetropolis: () => {
2
- eventActions: any;
3
- imageActions: any;
4
- locationActions: any;
5
- messageActions: any;
6
- postActions: any;
7
- profileActions: any;
8
- reactionActions: any;
9
- tagActions: any;
10
- userActions: any;
11
- websocketActions: any;
12
- };
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { MetropolisEnvironmentConfiguration } from '../config/index.js';
3
+ import type { ActionType } from '../utils/actionFactory.js';
4
+ /**
5
+ * Main hook to access Metropolis actions.
6
+ *
7
+ * @param actionTypes - Optional array of action types to create. If not provided, creates all actions.
8
+ * @returns Object containing the requested actions
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Get all actions (default behavior)
13
+ * const {userActions, postActions} = useMetropolis();
14
+ *
15
+ * // Get only specific actions (more performant)
16
+ * const {userActions} = useMetropolis(['user']);
17
+ * const {userActions, postActions} = useMetropolis(['user', 'post']);
18
+ * ```
19
+ */
20
+ export declare const useMetropolis: <T extends ActionType[] = ActionType[]>(actionTypes?: T) => Record<string, any>;
21
+ /**
22
+ * Hook to access the Metropolis configuration from context.
23
+ *
24
+ * @returns The resolved environment-specific configuration
25
+ * @throws Error if used outside of Metropolis component
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * const config = useMetropolisConfig();
30
+ * const apiUrl = config.app?.api?.url;
31
+ * ```
32
+ */
33
+ export declare const useMetropolisConfig: () => MetropolisEnvironmentConfiguration;
34
+ /**
35
+ * Hook to access the Flux framework instance from context.
36
+ *
37
+ * @returns The Flux framework instance
38
+ * @throws Error if used outside of Metropolis component and no Flux available
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * const flux = useMetropolisFlux();
43
+ * const state = flux.getState('user.session');
44
+ * ```
45
+ */
46
+ export declare const useMetropolisFlux: () => FluxFramework;
47
+ /**
48
+ * Specialized hooks for individual action types.
49
+ * These hooks only create the specific action type, improving performance.
50
+ */
51
+ export declare const useContentActions: () => any;
52
+ export declare const useEventActions: () => any;
53
+ export declare const useGroupActions: () => any;
54
+ export declare const useImageActions: () => any;
55
+ export declare const useLocationActions: () => any;
56
+ export declare const useMessageActions: () => any;
57
+ export declare const useSubscriptionActions: () => any;
58
+ export declare const usePermissionActions: () => any;
59
+ export declare const usePostActions: () => any;
60
+ export declare const usePersonaActions: () => any;
61
+ export declare const useReactionActions: () => any;
62
+ export declare const useTagActions: () => any;
63
+ export declare const useVideoActions: () => any;
64
+ export declare const useTranslationActions: () => any;
65
+ export declare const useUserActions: () => any;
66
+ export declare const useWebsocketActions: () => any;
67
+ //# sourceMappingURL=useMetropolis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMetropolis.d.ts","sourceRoot":"","sources":["../../src/utils/useMetropolis.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,kCAAkC,EAAC,MAAM,oBAAoB,CAAC;AAI3E,OAAO,KAAK,EAAgB,UAAU,EAAC,MAAM,2BAA2B,CAAC;AAmHzE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,EACjE,cAAc,CAAC,wBA0BhB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,QAAO,kCAWtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,QAAO,aAMpC,CAAC;AAEF;;;GAGG;AAEH,eAAO,MAAM,iBAAiB,WAG7B,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAG9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAG7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,WAGlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,WAGhC,CAAC;AAEF,eAAO,MAAM,cAAc,WAG1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAG7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAG9B,CAAC;AAEF,eAAO,MAAM,aAAa,WAGzB,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,WAGjC,CAAC;AAEF,eAAO,MAAM,cAAc,WAG1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAG/B,CAAC"}
@@ -1,2 +1,311 @@
1
- import{useFlux as b}from"@nlabs/arkhamjs-utils-react";import{useContext as k,useMemo as w}from"react";import{createAllActions as C}from"../utils/actionFactory";import{MetropolisContext as P}from"./MetropolisProvider";const R=()=>{const p=b(),{adapters:c}=k(P),{Event:e,Image:t,Location:a,Message:n,Post:o,Profile:s,Reaction:r,Tag:i,User:d}=c||{};return w(()=>{const{event:A,image:u,location:f,message:m,post:g,profile:l,reaction:y,tag:v,user:x,websocket:M}=C(p,{event:e?{eventAdapter:e}:void 0,image:t?{imageAdapter:t}:void 0,location:a?{locationAdapter:a}:void 0,message:n?{messageAdapter:n}:void 0,post:o?{postAdapter:o}:void 0,profile:s?{profileAdapter:s}:void 0,reaction:r?{reactionAdapter:r}:void 0,tag:i?{tagAdapter:i}:void 0,user:d?{userAdapter:d}:void 0});return{eventActions:A,imageActions:u,locationActions:f,messageActions:m,postActions:g,profileActions:l,reactionActions:y,tagActions:v,userActions:x,websocketActions:M}},[p,e,t,a,n,o,s,r,i,d])};export{R as useMetropolis};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3VzZU1ldHJvcG9saXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7dXNlRmx1eH0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzLXV0aWxzLXJlYWN0JztcbmltcG9ydCB7dXNlQ29udGV4dCwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge2NyZWF0ZUFsbEFjdGlvbnN9IGZyb20gJy4uL3V0aWxzL2FjdGlvbkZhY3RvcnknO1xuaW1wb3J0IHtNZXRyb3BvbGlzQ29udGV4dH0gZnJvbSAnLi9NZXRyb3BvbGlzUHJvdmlkZXInO1xuXG5leHBvcnQgY29uc3QgdXNlTWV0cm9wb2xpcyA9ICgpID0+IHtcbiAgY29uc3QgZmx1eCA9IHVzZUZsdXgoKTtcbiAgY29uc3Qge2FkYXB0ZXJzfSA9IHVzZUNvbnRleHQoTWV0cm9wb2xpc0NvbnRleHQpO1xuICBjb25zdCB7XG4gICAgRXZlbnQ6IGV2ZW50QWRhcHRlcixcbiAgICBJbWFnZTogaW1hZ2VBZGFwdGVyLFxuICAgIExvY2F0aW9uOiBsb2NhdGlvbkFkYXB0ZXIsXG4gICAgTWVzc2FnZTogbWVzc2FnZUFkYXB0ZXIsXG4gICAgUG9zdDogcG9zdEFkYXB0ZXIsXG4gICAgUHJvZmlsZTogcHJvZmlsZUFkYXB0ZXIsXG4gICAgUmVhY3Rpb246IHJlYWN0aW9uQWRhcHRlcixcbiAgICBUYWc6IHRhZ0FkYXB0ZXIsXG4gICAgVXNlcjogdXNlckFkYXB0ZXJcbiAgfSA9IGFkYXB0ZXJzIHx8IHt9O1xuXG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gICAgY29uc3Qge1xuICAgICAgZXZlbnQsXG4gICAgICBpbWFnZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHBvc3QsXG4gICAgICBwcm9maWxlLFxuICAgICAgcmVhY3Rpb24sXG4gICAgICB0YWcsXG4gICAgICB1c2VyLFxuICAgICAgd2Vic29ja2V0XG4gICAgfSA9IGNyZWF0ZUFsbEFjdGlvbnMoZmx1eCwge1xuICAgICAgLy8gVXNlIHR5cGUgYXNzZXJ0aW9ucyB0byBicmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBhZGFwdGVyIHNpZ25hdHVyZXNcbiAgICAgIGV2ZW50OiBldmVudEFkYXB0ZXIgPyB7ZXZlbnRBZGFwdGVyOiBldmVudEFkYXB0ZXIgYXMgYW55fSA6IHVuZGVmaW5lZCxcbiAgICAgIGltYWdlOiBpbWFnZUFkYXB0ZXIgPyB7aW1hZ2VBZGFwdGVyOiBpbWFnZUFkYXB0ZXIgYXMgYW55fSA6IHVuZGVmaW5lZCxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbkFkYXB0ZXIgPyB7bG9jYXRpb25BZGFwdGVyOiBsb2NhdGlvbkFkYXB0ZXIgYXMgYW55fSA6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VBZGFwdGVyID8ge21lc3NhZ2VBZGFwdGVyOiBtZXNzYWdlQWRhcHRlciBhcyBhbnl9IDogdW5kZWZpbmVkLFxuICAgICAgcG9zdDogcG9zdEFkYXB0ZXIgPyB7cG9zdEFkYXB0ZXI6IHBvc3RBZGFwdGVyIGFzIGFueX0gOiB1bmRlZmluZWQsXG4gICAgICBwcm9maWxlOiBwcm9maWxlQWRhcHRlciA/IHtwcm9maWxlQWRhcHRlcjogcHJvZmlsZUFkYXB0ZXIgYXMgYW55fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlYWN0aW9uOiByZWFjdGlvbkFkYXB0ZXIgPyB7cmVhY3Rpb25BZGFwdGVyOiByZWFjdGlvbkFkYXB0ZXIgYXMgYW55fSA6IHVuZGVmaW5lZCxcbiAgICAgIHRhZzogdGFnQWRhcHRlciA/IHt0YWdBZGFwdGVyOiB0YWdBZGFwdGVyIGFzIGFueX0gOiB1bmRlZmluZWQsXG4gICAgICB1c2VyOiB1c2VyQWRhcHRlciA/IHt1c2VyQWRhcHRlcjogdXNlckFkYXB0ZXIgYXMgYW55fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50QWN0aW9uczogZXZlbnQsXG4gICAgICBpbWFnZUFjdGlvbnM6IGltYWdlLFxuICAgICAgbG9jYXRpb25BY3Rpb25zOiBsb2NhdGlvbixcbiAgICAgIG1lc3NhZ2VBY3Rpb25zOiBtZXNzYWdlLFxuICAgICAgcG9zdEFjdGlvbnM6IHBvc3QsXG4gICAgICBwcm9maWxlQWN0aW9uczogcHJvZmlsZSxcbiAgICAgIHJlYWN0aW9uQWN0aW9uczogcmVhY3Rpb24sXG4gICAgICB0YWdBY3Rpb25zOiB0YWcsXG4gICAgICB1c2VyQWN0aW9uczogdXNlcixcbiAgICAgIHdlYnNvY2tldEFjdGlvbnM6IHdlYnNvY2tldFxuICAgIH07XG4gIH0sIFtcbiAgICBmbHV4LFxuICAgIGV2ZW50QWRhcHRlcixcbiAgICBpbWFnZUFkYXB0ZXIsXG4gICAgbG9jYXRpb25BZGFwdGVyLFxuICAgIG1lc3NhZ2VBZGFwdGVyLFxuICAgIHBvc3RBZGFwdGVyLFxuICAgIHByb2ZpbGVBZGFwdGVyLFxuICAgIHJlYWN0aW9uQWRhcHRlcixcbiAgICB0YWdBZGFwdGVyLFxuICAgIHVzZXJBZGFwdGVyXG4gIF0pO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxPQUFRLFdBQUFBLE1BQWMsOEJBQ3RCLE9BQVEsY0FBQUMsRUFBWSxXQUFBQyxNQUFjLFFBRWxDLE9BQVEsb0JBQUFDLE1BQXVCLHlCQUMvQixPQUFRLHFCQUFBQyxNQUF3Qix1QkFFekIsTUFBTUMsRUFBZ0IsSUFBTSxDQUNqQyxNQUFNQyxFQUFPTixFQUFRLEVBQ2YsQ0FBQyxTQUFBTyxDQUFRLEVBQUlOLEVBQVdHLENBQWlCLEVBQ3pDLENBQ0osTUFBT0ksRUFDUCxNQUFPQyxFQUNQLFNBQVVDLEVBQ1YsUUFBU0MsRUFDVCxLQUFNQyxFQUNOLFFBQVNDLEVBQ1QsU0FBVUMsRUFDVixJQUFLQyxFQUNMLEtBQU1DLENBQ1IsRUFBSVQsR0FBWSxDQUFDLEVBRWpCLE9BQU9MLEVBQVEsSUFBTSxDQUVuQixLQUFNLENBQ0osTUFBQWUsRUFDQSxNQUFBQyxFQUNBLFNBQUFDLEVBQ0EsUUFBQUMsRUFDQSxLQUFBQyxFQUNBLFFBQUFDLEVBQ0EsU0FBQUMsRUFDQSxJQUFBQyxFQUNBLEtBQUFDLEVBQ0EsVUFBQUMsQ0FDRixFQUFJdkIsRUFBaUJHLEVBQU0sQ0FFekIsTUFBT0UsRUFBZSxDQUFDLGFBQWNBLENBQW1CLEVBQUksT0FDNUQsTUFBT0MsRUFBZSxDQUFDLGFBQWNBLENBQW1CLEVBQUksT0FDNUQsU0FBVUMsRUFBa0IsQ0FBQyxnQkFBaUJBLENBQXNCLEVBQUksT0FDeEUsUUFBU0MsRUFBaUIsQ0FBQyxlQUFnQkEsQ0FBcUIsRUFBSSxPQUNwRSxLQUFNQyxFQUFjLENBQUMsWUFBYUEsQ0FBa0IsRUFBSSxPQUN4RCxRQUFTQyxFQUFpQixDQUFDLGVBQWdCQSxDQUFxQixFQUFJLE9BQ3BFLFNBQVVDLEVBQWtCLENBQUMsZ0JBQWlCQSxDQUFzQixFQUFJLE9BQ3hFLElBQUtDLEVBQWEsQ0FBQyxXQUFZQSxDQUFpQixFQUFJLE9BQ3BELEtBQU1DLEVBQWMsQ0FBQyxZQUFhQSxDQUFrQixFQUFJLE1BQzFELENBQUMsRUFFRCxNQUFPLENBQ0wsYUFBY0MsRUFDZCxhQUFjQyxFQUNkLGdCQUFpQkMsRUFDakIsZUFBZ0JDLEVBQ2hCLFlBQWFDLEVBQ2IsZUFBZ0JDLEVBQ2hCLGdCQUFpQkMsRUFDakIsV0FBWUMsRUFDWixZQUFhQyxFQUNiLGlCQUFrQkMsQ0FDcEIsQ0FDRixFQUFHLENBQ0RwQixFQUNBRSxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxDQUNGLENBQUMsQ0FDSCIsCiAgIm5hbWVzIjogWyJ1c2VGbHV4IiwgInVzZUNvbnRleHQiLCAidXNlTWVtbyIsICJjcmVhdGVBbGxBY3Rpb25zIiwgIk1ldHJvcG9saXNDb250ZXh0IiwgInVzZU1ldHJvcG9saXMiLCAiZmx1eCIsICJhZGFwdGVycyIsICJldmVudEFkYXB0ZXIiLCAiaW1hZ2VBZGFwdGVyIiwgImxvY2F0aW9uQWRhcHRlciIsICJtZXNzYWdlQWRhcHRlciIsICJwb3N0QWRhcHRlciIsICJwcm9maWxlQWRhcHRlciIsICJyZWFjdGlvbkFkYXB0ZXIiLCAidGFnQWRhcHRlciIsICJ1c2VyQWRhcHRlciIsICJldmVudCIsICJpbWFnZSIsICJsb2NhdGlvbiIsICJtZXNzYWdlIiwgInBvc3QiLCAicHJvZmlsZSIsICJyZWFjdGlvbiIsICJ0YWciLCAidXNlciIsICJ3ZWJzb2NrZXQiXQp9Cg==
1
+ import { useFlux } from '@nlabs/arkhamjs-utils-react';
2
+ import { useContext, useMemo } from 'react';
3
+ import { createActions, createAllActions } from '../utils/actionFactory.js';
4
+ import { MetropolisContext } from './MetropolisProvider.js';
5
+ /**
6
+ * Builds action options from adapters in a type-safe way.
7
+ */ const buildActionOptions = (adapters)=>{
8
+ if (!adapters) {
9
+ return {};
10
+ }
11
+ const options = {};
12
+ if (adapters.Content) {
13
+ options.content = {
14
+ contentAdapter: adapters.Content
15
+ };
16
+ }
17
+ if (adapters.Event) {
18
+ options.event = {
19
+ eventAdapter: adapters.Event
20
+ };
21
+ }
22
+ if (adapters.Image) {
23
+ options.image = {
24
+ imageAdapter: adapters.Image
25
+ };
26
+ }
27
+ if (adapters.Location) {
28
+ options.location = {
29
+ locationAdapter: adapters.Location
30
+ };
31
+ }
32
+ if (adapters.Message) {
33
+ options.message = {
34
+ messageAdapter: adapters.Message
35
+ };
36
+ }
37
+ if (adapters.Permission) {
38
+ options.permission = {
39
+ permissionAdapter: adapters.Permission
40
+ };
41
+ }
42
+ if (adapters.Post) {
43
+ options.post = {
44
+ postAdapter: adapters.Post
45
+ };
46
+ }
47
+ if (adapters.Persona) {
48
+ options.persona = {
49
+ personaAdapter: adapters.Persona
50
+ };
51
+ }
52
+ if (adapters.Reaction) {
53
+ options.reaction = {
54
+ reactionAdapter: adapters.Reaction
55
+ };
56
+ }
57
+ if (adapters.Tag) {
58
+ options.tag = {
59
+ tagAdapter: adapters.Tag
60
+ };
61
+ }
62
+ if (adapters.Translation) {
63
+ options.translation = {
64
+ translationAdapter: adapters.Translation
65
+ };
66
+ }
67
+ if (adapters.User) {
68
+ options.user = {
69
+ userAdapter: adapters.User
70
+ };
71
+ }
72
+ if (adapters.Video) {
73
+ options.video = {
74
+ videoAdapter: adapters.Video
75
+ };
76
+ }
77
+ return options;
78
+ };
79
+ /**
80
+ * Maps action type keys to their action names for return object.
81
+ */ const mapActionsToReturnKeys = (actions)=>{
82
+ const mapped = {};
83
+ if (actions.content) {
84
+ mapped.contentActions = actions.content;
85
+ }
86
+ if (actions.event) {
87
+ mapped.eventActions = actions.event;
88
+ }
89
+ if (actions.group) {
90
+ mapped.groupActions = actions.group;
91
+ }
92
+ if (actions.image) {
93
+ mapped.imageActions = actions.image;
94
+ }
95
+ if (actions.location) {
96
+ mapped.locationActions = actions.location;
97
+ }
98
+ if (actions.message) {
99
+ mapped.messageActions = actions.message;
100
+ }
101
+ if (actions.permission) {
102
+ mapped.permissionActions = actions.permission;
103
+ }
104
+ if (actions.post) {
105
+ mapped.postActions = actions.post;
106
+ }
107
+ if (actions.persona) {
108
+ mapped.personaActions = actions.persona;
109
+ }
110
+ if (actions.reaction) {
111
+ mapped.reactionActions = actions.reaction;
112
+ }
113
+ if (actions.subscription) {
114
+ mapped.subscriptionActions = actions.subscription;
115
+ }
116
+ if (actions.tag) {
117
+ mapped.tagActions = actions.tag;
118
+ }
119
+ if (actions.translation) {
120
+ mapped.translationActions = actions.translation;
121
+ }
122
+ if (actions.user) {
123
+ mapped.userActions = actions.user;
124
+ }
125
+ if (actions.video) {
126
+ mapped.videoActions = actions.video;
127
+ }
128
+ if (actions.websocket) {
129
+ mapped.websocketActions = actions.websocket;
130
+ }
131
+ return mapped;
132
+ };
133
+ /**
134
+ * Main hook to access Metropolis actions.
135
+ *
136
+ * @param actionTypes - Optional array of action types to create. If not provided, creates all actions.
137
+ * @returns Object containing the requested actions
138
+ *
139
+ * @example
140
+ * ```tsx
141
+ * // Get all actions (default behavior)
142
+ * const {userActions, postActions} = useMetropolis();
143
+ *
144
+ * // Get only specific actions (more performant)
145
+ * const {userActions} = useMetropolis(['user']);
146
+ * const {userActions, postActions} = useMetropolis(['user', 'post']);
147
+ * ```
148
+ */ export const useMetropolis = (actionTypes)=>{
149
+ const context = useContext(MetropolisContext);
150
+ // Use flux from context if available, otherwise fall back to useFlux() for backward compatibility
151
+ const contextFlux = context?.flux;
152
+ const hookFlux = useFlux();
153
+ const flux = contextFlux || hookFlux;
154
+ const { adapters } = context;
155
+ const actionOptions = useMemo(()=>buildActionOptions(adapters), [
156
+ adapters
157
+ ]);
158
+ return useMemo(()=>{
159
+ let actions;
160
+ if (actionTypes && actionTypes.length > 0) {
161
+ // Create only requested actions
162
+ actions = createActions(actionTypes, flux, actionOptions);
163
+ } else {
164
+ // Create all actions (default behavior for backward compatibility)
165
+ const allActions = createAllActions(flux, actionOptions);
166
+ actions = allActions;
167
+ }
168
+ // Map to return keys (contentActions, userActions, etc.)
169
+ return mapActionsToReturnKeys(actions);
170
+ }, [
171
+ flux,
172
+ actionOptions,
173
+ actionTypes?.join(',')
174
+ ]);
175
+ };
176
+ /**
177
+ * Hook to access the Metropolis configuration from context.
178
+ *
179
+ * @returns The resolved environment-specific configuration
180
+ * @throws Error if used outside of Metropolis component
181
+ *
182
+ * @example
183
+ * ```tsx
184
+ * const config = useMetropolisConfig();
185
+ * const apiUrl = config.app?.api?.url;
186
+ * ```
187
+ */ export const useMetropolisConfig = ()=>{
188
+ const context = useContext(MetropolisContext);
189
+ if (!context?.config) {
190
+ throw new Error('useMetropolisConfig must be used within a Metropolis component. ' + 'Make sure your component is wrapped with <Metropolis> provider.');
191
+ }
192
+ return context.config;
193
+ };
194
+ /**
195
+ * Hook to access the Flux framework instance from context.
196
+ *
197
+ * @returns The Flux framework instance
198
+ * @throws Error if used outside of Metropolis component and no Flux available
199
+ *
200
+ * @example
201
+ * ```tsx
202
+ * const flux = useMetropolisFlux();
203
+ * const state = flux.getState('user.session');
204
+ * ```
205
+ */ export const useMetropolisFlux = ()=>{
206
+ const context = useContext(MetropolisContext);
207
+ const hookFlux = useFlux();
208
+ // Use flux from context if available, otherwise fall back to useFlux() for backward compatibility
209
+ return context?.flux || hookFlux;
210
+ };
211
+ /**
212
+ * Specialized hooks for individual action types.
213
+ * These hooks only create the specific action type, improving performance.
214
+ */ export const useContentActions = ()=>{
215
+ const { contentActions } = useMetropolis([
216
+ 'content'
217
+ ]);
218
+ return contentActions;
219
+ };
220
+ export const useEventActions = ()=>{
221
+ const { eventActions } = useMetropolis([
222
+ 'event'
223
+ ]);
224
+ return eventActions;
225
+ };
226
+ export const useGroupActions = ()=>{
227
+ const { groupActions } = useMetropolis([
228
+ 'group'
229
+ ]);
230
+ return groupActions;
231
+ };
232
+ export const useImageActions = ()=>{
233
+ const { imageActions } = useMetropolis([
234
+ 'image'
235
+ ]);
236
+ return imageActions;
237
+ };
238
+ export const useLocationActions = ()=>{
239
+ const { locationActions } = useMetropolis([
240
+ 'location'
241
+ ]);
242
+ return locationActions;
243
+ };
244
+ export const useMessageActions = ()=>{
245
+ const { messageActions } = useMetropolis([
246
+ 'message'
247
+ ]);
248
+ return messageActions;
249
+ };
250
+ export const useSubscriptionActions = ()=>{
251
+ const { subscriptionActions } = useMetropolis([
252
+ 'subscription'
253
+ ]);
254
+ return subscriptionActions;
255
+ };
256
+ export const usePermissionActions = ()=>{
257
+ const { permissionActions } = useMetropolis([
258
+ 'permission'
259
+ ]);
260
+ return permissionActions;
261
+ };
262
+ export const usePostActions = ()=>{
263
+ const { postActions } = useMetropolis([
264
+ 'post'
265
+ ]);
266
+ return postActions;
267
+ };
268
+ export const usePersonaActions = ()=>{
269
+ const { personaActions } = useMetropolis([
270
+ 'persona'
271
+ ]);
272
+ return personaActions;
273
+ };
274
+ export const useReactionActions = ()=>{
275
+ const { reactionActions } = useMetropolis([
276
+ 'reaction'
277
+ ]);
278
+ return reactionActions;
279
+ };
280
+ export const useTagActions = ()=>{
281
+ const { tagActions } = useMetropolis([
282
+ 'tag'
283
+ ]);
284
+ return tagActions;
285
+ };
286
+ export const useVideoActions = ()=>{
287
+ const { videoActions } = useMetropolis([
288
+ 'video'
289
+ ]);
290
+ return videoActions;
291
+ };
292
+ export const useTranslationActions = ()=>{
293
+ const { translationActions } = useMetropolis([
294
+ 'translation'
295
+ ]);
296
+ return translationActions;
297
+ };
298
+ export const useUserActions = ()=>{
299
+ const { userActions } = useMetropolis([
300
+ 'user'
301
+ ]);
302
+ return userActions;
303
+ };
304
+ export const useWebsocketActions = ()=>{
305
+ const { websocketActions } = useMetropolis([
306
+ 'websocket'
307
+ ]);
308
+ return websocketActions;
309
+ };
310
+
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvdXNlTWV0cm9wb2xpcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUZsdXh9IGZyb20gJ0BubGFicy9hcmtoYW1qcy11dGlscy1yZWFjdCc7XG5pbXBvcnQge3VzZUNvbnRleHQsIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7TWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY29uZmlnL2luZGV4LmpzJztcbmltcG9ydCB7Y3JlYXRlQWN0aW9ucywgY3JlYXRlQWxsQWN0aW9uc30gZnJvbSAnLi4vdXRpbHMvYWN0aW9uRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7TWV0cm9wb2xpc0FkYXB0ZXJzfSBmcm9tICcuL01ldHJvcG9saXNQcm92aWRlci5qcyc7XG5pbXBvcnQge01ldHJvcG9saXNDb250ZXh0fSBmcm9tICcuL01ldHJvcG9saXNQcm92aWRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uT3B0aW9ucywgQWN0aW9uVHlwZX0gZnJvbSAnLi4vdXRpbHMvYWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8qKlxuICogQnVpbGRzIGFjdGlvbiBvcHRpb25zIGZyb20gYWRhcHRlcnMgaW4gYSB0eXBlLXNhZmUgd2F5LlxuICovXG5jb25zdCBidWlsZEFjdGlvbk9wdGlvbnMgPSAoXG4gIGFkYXB0ZXJzPzogTWV0cm9wb2xpc0FkYXB0ZXJzXG4pOiBQYXJ0aWFsPFJlY29yZDxBY3Rpb25UeXBlLCBBY3Rpb25PcHRpb25zPj4gPT4ge1xuICBpZiAoIWFkYXB0ZXJzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uT3B0aW9ucz4+ID0ge307XG5cbiAgaWYgKGFkYXB0ZXJzLkNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmNvbnRlbnQgPSB7Y29udGVudEFkYXB0ZXI6IGFkYXB0ZXJzLkNvbnRlbnR9O1xuICB9XG4gIGlmIChhZGFwdGVycy5FdmVudCkge1xuICAgIG9wdGlvbnMuZXZlbnQgPSB7ZXZlbnRBZGFwdGVyOiBhZGFwdGVycy5FdmVudH07XG4gIH1cbiAgaWYgKGFkYXB0ZXJzLkltYWdlKSB7XG4gICAgb3B0aW9ucy5pbWFnZSA9IHtpbWFnZUFkYXB0ZXI6IGFkYXB0ZXJzLkltYWdlfTtcbiAgfVxuICBpZiAoYWRhcHRlcnMuTG9jYXRpb24pIHtcbiAgICBvcHRpb25zLmxvY2F0aW9uID0ge2xvY2F0aW9uQWRhcHRlcjogYWRhcHRlcnMuTG9jYXRpb259O1xuICB9XG4gIGlmIChhZGFwdGVycy5NZXNzYWdlKSB7XG4gICAgb3B0aW9ucy5tZXNzYWdlID0ge21lc3NhZ2VBZGFwdGVyOiBhZGFwdGVycy5NZXNzYWdlfTtcbiAgfVxuICBpZiAoYWRhcHRlcnMuUGVybWlzc2lvbikge1xuICAgIG9wdGlvbnMucGVybWlzc2lvbiA9IHtwZXJtaXNzaW9uQWRhcHRlcjogYWRhcHRlcnMuUGVybWlzc2lvbn07XG4gIH1cbiAgaWYgKGFkYXB0ZXJzLlBvc3QpIHtcbiAgICBvcHRpb25zLnBvc3QgPSB7cG9zdEFkYXB0ZXI6IGFkYXB0ZXJzLlBvc3R9O1xuICB9XG4gIGlmIChhZGFwdGVycy5QZXJzb25hKSB7XG4gICAgb3B0aW9ucy5wZXJzb25hID0ge3BlcnNvbmFBZGFwdGVyOiBhZGFwdGVycy5QZXJzb25hfTtcbiAgfVxuICBpZiAoYWRhcHRlcnMuUmVhY3Rpb24pIHtcbiAgICBvcHRpb25zLnJlYWN0aW9uID0ge3JlYWN0aW9uQWRhcHRlcjogYWRhcHRlcnMuUmVhY3Rpb259O1xuICB9XG4gIGlmIChhZGFwdGVycy5UYWcpIHtcbiAgICBvcHRpb25zLnRhZyA9IHt0YWdBZGFwdGVyOiBhZGFwdGVycy5UYWd9O1xuICB9XG4gIGlmIChhZGFwdGVycy5UcmFuc2xhdGlvbikge1xuICAgIG9wdGlvbnMudHJhbnNsYXRpb24gPSB7dHJhbnNsYXRpb25BZGFwdGVyOiBhZGFwdGVycy5UcmFuc2xhdGlvbn07XG4gIH1cbiAgaWYgKGFkYXB0ZXJzLlVzZXIpIHtcbiAgICBvcHRpb25zLnVzZXIgPSB7dXNlckFkYXB0ZXI6IGFkYXB0ZXJzLlVzZXJ9O1xuICB9XG4gIGlmIChhZGFwdGVycy5WaWRlbykge1xuICAgIG9wdGlvbnMudmlkZW8gPSB7dmlkZW9BZGFwdGVyOiBhZGFwdGVycy5WaWRlb307XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbi8qKlxuICogTWFwcyBhY3Rpb24gdHlwZSBrZXlzIHRvIHRoZWlyIGFjdGlvbiBuYW1lcyBmb3IgcmV0dXJuIG9iamVjdC5cbiAqL1xuY29uc3QgbWFwQWN0aW9uc1RvUmV0dXJuS2V5cyA9IChhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gIGNvbnN0IG1hcHBlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGlmIChhY3Rpb25zLmNvbnRlbnQpIHtcbiAgICBtYXBwZWQuY29udGVudEFjdGlvbnMgPSBhY3Rpb25zLmNvbnRlbnQ7XG4gIH1cbiAgaWYgKGFjdGlvbnMuZXZlbnQpIHtcbiAgICBtYXBwZWQuZXZlbnRBY3Rpb25zID0gYWN0aW9ucy5ldmVudDtcbiAgfVxuICBpZiAoYWN0aW9ucy5ncm91cCkge1xuICAgIG1hcHBlZC5ncm91cEFjdGlvbnMgPSBhY3Rpb25zLmdyb3VwO1xuICB9XG4gIGlmIChhY3Rpb25zLmltYWdlKSB7XG4gICAgbWFwcGVkLmltYWdlQWN0aW9ucyA9IGFjdGlvbnMuaW1hZ2U7XG4gIH1cbiAgaWYgKGFjdGlvbnMubG9jYXRpb24pIHtcbiAgICBtYXBwZWQubG9jYXRpb25BY3Rpb25zID0gYWN0aW9ucy5sb2NhdGlvbjtcbiAgfVxuICBpZiAoYWN0aW9ucy5tZXNzYWdlKSB7XG4gICAgbWFwcGVkLm1lc3NhZ2VBY3Rpb25zID0gYWN0aW9ucy5tZXNzYWdlO1xuICB9XG4gIGlmIChhY3Rpb25zLnBlcm1pc3Npb24pIHtcbiAgICBtYXBwZWQucGVybWlzc2lvbkFjdGlvbnMgPSBhY3Rpb25zLnBlcm1pc3Npb247XG4gIH1cbiAgaWYgKGFjdGlvbnMucG9zdCkge1xuICAgIG1hcHBlZC5wb3N0QWN0aW9ucyA9IGFjdGlvbnMucG9zdDtcbiAgfVxuICBpZiAoYWN0aW9ucy5wZXJzb25hKSB7XG4gICAgbWFwcGVkLnBlcnNvbmFBY3Rpb25zID0gYWN0aW9ucy5wZXJzb25hO1xuICB9XG4gIGlmIChhY3Rpb25zLnJlYWN0aW9uKSB7XG4gICAgbWFwcGVkLnJlYWN0aW9uQWN0aW9ucyA9IGFjdGlvbnMucmVhY3Rpb247XG4gIH1cbiAgaWYgKGFjdGlvbnMuc3Vic2NyaXB0aW9uKSB7XG4gICAgbWFwcGVkLnN1YnNjcmlwdGlvbkFjdGlvbnMgPSBhY3Rpb25zLnN1YnNjcmlwdGlvbjtcbiAgfVxuICBpZiAoYWN0aW9ucy50YWcpIHtcbiAgICBtYXBwZWQudGFnQWN0aW9ucyA9IGFjdGlvbnMudGFnO1xuICB9XG4gIGlmIChhY3Rpb25zLnRyYW5zbGF0aW9uKSB7XG4gICAgbWFwcGVkLnRyYW5zbGF0aW9uQWN0aW9ucyA9IGFjdGlvbnMudHJhbnNsYXRpb247XG4gIH1cbiAgaWYgKGFjdGlvbnMudXNlcikge1xuICAgIG1hcHBlZC51c2VyQWN0aW9ucyA9IGFjdGlvbnMudXNlcjtcbiAgfVxuICBpZiAoYWN0aW9ucy52aWRlbykge1xuICAgIG1hcHBlZC52aWRlb0FjdGlvbnMgPSBhY3Rpb25zLnZpZGVvO1xuICB9XG4gIGlmIChhY3Rpb25zLndlYnNvY2tldCkge1xuICAgIG1hcHBlZC53ZWJzb2NrZXRBY3Rpb25zID0gYWN0aW9ucy53ZWJzb2NrZXQ7XG4gIH1cblxuICByZXR1cm4gbWFwcGVkO1xufTtcblxuLyoqXG4gKiBNYWluIGhvb2sgdG8gYWNjZXNzIE1ldHJvcG9saXMgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gYWN0aW9uVHlwZXMgLSBPcHRpb25hbCBhcnJheSBvZiBhY3Rpb24gdHlwZXMgdG8gY3JlYXRlLiBJZiBub3QgcHJvdmlkZWQsIGNyZWF0ZXMgYWxsIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGFjdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiAvLyBHZXQgYWxsIGFjdGlvbnMgKGRlZmF1bHQgYmVoYXZpb3IpXG4gKiBjb25zdCB7dXNlckFjdGlvbnMsIHBvc3RBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoKTtcbiAqXG4gKiAvLyBHZXQgb25seSBzcGVjaWZpYyBhY3Rpb25zIChtb3JlIHBlcmZvcm1hbnQpXG4gKiBjb25zdCB7dXNlckFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3VzZXInXSk7XG4gKiBjb25zdCB7dXNlckFjdGlvbnMsIHBvc3RBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWyd1c2VyJywgJ3Bvc3QnXSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1ldHJvcG9saXMgPSA8VCBleHRlbmRzIEFjdGlvblR5cGVbXSA9IEFjdGlvblR5cGVbXT4oXG4gIGFjdGlvblR5cGVzPzogVFxuKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1ldHJvcG9saXNDb250ZXh0KTtcbiAgLy8gVXNlIGZsdXggZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2VGbHV4KCkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgY29udGV4dEZsdXggPSBjb250ZXh0Py5mbHV4O1xuICBjb25zdCBob29rRmx1eCA9IHVzZUZsdXgoKTtcbiAgY29uc3QgZmx1eCA9IGNvbnRleHRGbHV4IHx8IGhvb2tGbHV4O1xuXG4gIGNvbnN0IHthZGFwdGVyc30gPSBjb250ZXh0O1xuICBjb25zdCBhY3Rpb25PcHRpb25zID0gdXNlTWVtbygoKSA9PiBidWlsZEFjdGlvbk9wdGlvbnMoYWRhcHRlcnMpLCBbYWRhcHRlcnNdKTtcblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBpZiAoYWN0aW9uVHlwZXMgJiYgYWN0aW9uVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ3JlYXRlIG9ubHkgcmVxdWVzdGVkIGFjdGlvbnNcbiAgICAgIGFjdGlvbnMgPSBjcmVhdGVBY3Rpb25zKGFjdGlvblR5cGVzLCBmbHV4LCBhY3Rpb25PcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGFsbCBhY3Rpb25zIChkZWZhdWx0IGJlaGF2aW9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgICAgY29uc3QgYWxsQWN0aW9ucyA9IGNyZWF0ZUFsbEFjdGlvbnMoZmx1eCwgYWN0aW9uT3B0aW9ucyk7XG4gICAgICBhY3Rpb25zID0gYWxsQWN0aW9ucztcbiAgICB9XG5cbiAgICAvLyBNYXAgdG8gcmV0dXJuIGtleXMgKGNvbnRlbnRBY3Rpb25zLCB1c2VyQWN0aW9ucywgZXRjLilcbiAgICByZXR1cm4gbWFwQWN0aW9uc1RvUmV0dXJuS2V5cyhhY3Rpb25zKTtcbiAgfSwgW2ZsdXgsIGFjdGlvbk9wdGlvbnMsIGFjdGlvblR5cGVzPy5qb2luKCcsJyldKTtcbn07XG5cbi8qKlxuICogSG9vayB0byBhY2Nlc3MgdGhlIE1ldHJvcG9saXMgY29uZmlndXJhdGlvbiBmcm9tIGNvbnRleHQuXG4gKlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGVudmlyb25tZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdXNlZCBvdXRzaWRlIG9mIE1ldHJvcG9saXMgY29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgY29uZmlnID0gdXNlTWV0cm9wb2xpc0NvbmZpZygpO1xuICogY29uc3QgYXBpVXJsID0gY29uZmlnLmFwcD8uYXBpPy51cmw7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1ldHJvcG9saXNDb25maWcgPSAoKTogTWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbiA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1ldHJvcG9saXNDb250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQ/LmNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICd1c2VNZXRyb3BvbGlzQ29uZmlnIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNZXRyb3BvbGlzIGNvbXBvbmVudC4gJyArXG4gICAgICAnTWFrZSBzdXJlIHlvdXIgY29tcG9uZW50IGlzIHdyYXBwZWQgd2l0aCA8TWV0cm9wb2xpcz4gcHJvdmlkZXIuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5jb25maWc7XG59O1xuXG4vKipcbiAqIEhvb2sgdG8gYWNjZXNzIHRoZSBGbHV4IGZyYW1ld29yayBpbnN0YW5jZSBmcm9tIGNvbnRleHQuXG4gKlxuICogQHJldHVybnMgVGhlIEZsdXggZnJhbWV3b3JrIGluc3RhbmNlXG4gKiBAdGhyb3dzIEVycm9yIGlmIHVzZWQgb3V0c2lkZSBvZiBNZXRyb3BvbGlzIGNvbXBvbmVudCBhbmQgbm8gRmx1eCBhdmFpbGFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBmbHV4ID0gdXNlTWV0cm9wb2xpc0ZsdXgoKTtcbiAqIGNvbnN0IHN0YXRlID0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1ldHJvcG9saXNGbHV4ID0gKCk6IEZsdXhGcmFtZXdvcmsgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNZXRyb3BvbGlzQ29udGV4dCk7XG4gIGNvbnN0IGhvb2tGbHV4ID0gdXNlRmx1eCgpO1xuXG4gIC8vIFVzZSBmbHV4IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNlRmx1eCgpIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIHJldHVybiBjb250ZXh0Py5mbHV4IHx8IGhvb2tGbHV4O1xufTtcblxuLyoqXG4gKiBTcGVjaWFsaXplZCBob29rcyBmb3IgaW5kaXZpZHVhbCBhY3Rpb24gdHlwZXMuXG4gKiBUaGVzZSBob29rcyBvbmx5IGNyZWF0ZSB0aGUgc3BlY2lmaWMgYWN0aW9uIHR5cGUsIGltcHJvdmluZyBwZXJmb3JtYW5jZS5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlQ29udGVudEFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtjb250ZW50QWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnY29udGVudCddKTtcbiAgcmV0dXJuIGNvbnRlbnRBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUV2ZW50QWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge2V2ZW50QWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnZXZlbnQnXSk7XG4gIHJldHVybiBldmVudEFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JvdXBBY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7Z3JvdXBBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWydncm91cCddKTtcbiAgcmV0dXJuIGdyb3VwQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VJbWFnZUFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtpbWFnZUFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ2ltYWdlJ10pO1xuICByZXR1cm4gaW1hZ2VBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUxvY2F0aW9uQWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge2xvY2F0aW9uQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnbG9jYXRpb24nXSk7XG4gIHJldHVybiBsb2NhdGlvbkFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTWVzc2FnZUFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHttZXNzYWdlQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnbWVzc2FnZSddKTtcbiAgcmV0dXJuIG1lc3NhZ2VBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVN1YnNjcmlwdGlvbkFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtzdWJzY3JpcHRpb25BY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWydzdWJzY3JpcHRpb24nXSk7XG4gIHJldHVybiBzdWJzY3JpcHRpb25BY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVBlcm1pc3Npb25BY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7cGVybWlzc2lvbkFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3Blcm1pc3Npb24nXSk7XG4gIHJldHVybiBwZXJtaXNzaW9uQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VQb3N0QWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge3Bvc3RBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWydwb3N0J10pO1xuICByZXR1cm4gcG9zdEFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUGVyc29uYUFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtwZXJzb25hQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsncGVyc29uYSddKTtcbiAgcmV0dXJuIHBlcnNvbmFBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVJlYWN0aW9uQWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge3JlYWN0aW9uQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsncmVhY3Rpb24nXSk7XG4gIHJldHVybiByZWFjdGlvbkFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVGFnQWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge3RhZ0FjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3RhZyddKTtcbiAgcmV0dXJuIHRhZ0FjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVmlkZW9BY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7dmlkZW9BY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWyd2aWRlbyddKTtcbiAgcmV0dXJuIHZpZGVvQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VUcmFuc2xhdGlvbkFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHt0cmFuc2xhdGlvbkFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3RyYW5zbGF0aW9uJ10pO1xuICByZXR1cm4gdHJhbnNsYXRpb25BY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVzZXJBY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7dXNlckFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3VzZXInXSk7XG4gIHJldHVybiB1c2VyQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VXZWJzb2NrZXRBY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7d2Vic29ja2V0QWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnd2Vic29ja2V0J10pO1xuICByZXR1cm4gd2Vic29ja2V0QWN0aW9ucztcbn07XG4iXSwibmFtZXMiOlsidXNlRmx1eCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwiY3JlYXRlQWN0aW9ucyIsImNyZWF0ZUFsbEFjdGlvbnMiLCJNZXRyb3BvbGlzQ29udGV4dCIsImJ1aWxkQWN0aW9uT3B0aW9ucyIsImFkYXB0ZXJzIiwib3B0aW9ucyIsIkNvbnRlbnQiLCJjb250ZW50IiwiY29udGVudEFkYXB0ZXIiLCJFdmVudCIsImV2ZW50IiwiZXZlbnRBZGFwdGVyIiwiSW1hZ2UiLCJpbWFnZSIsImltYWdlQWRhcHRlciIsIkxvY2F0aW9uIiwibG9jYXRpb24iLCJsb2NhdGlvbkFkYXB0ZXIiLCJNZXNzYWdlIiwibWVzc2FnZSIsIm1lc3NhZ2VBZGFwdGVyIiwiUGVybWlzc2lvbiIsInBlcm1pc3Npb24iLCJwZXJtaXNzaW9uQWRhcHRlciIsIlBvc3QiLCJwb3N0IiwicG9zdEFkYXB0ZXIiLCJQZXJzb25hIiwicGVyc29uYSIsInBlcnNvbmFBZGFwdGVyIiwiUmVhY3Rpb24iLCJyZWFjdGlvbiIsInJlYWN0aW9uQWRhcHRlciIsIlRhZyIsInRhZyIsInRhZ0FkYXB0ZXIiLCJUcmFuc2xhdGlvbiIsInRyYW5zbGF0aW9uIiwidHJhbnNsYXRpb25BZGFwdGVyIiwiVXNlciIsInVzZXIiLCJ1c2VyQWRhcHRlciIsIlZpZGVvIiwidmlkZW8iLCJ2aWRlb0FkYXB0ZXIiLCJtYXBBY3Rpb25zVG9SZXR1cm5LZXlzIiwiYWN0aW9ucyIsIm1hcHBlZCIsImNvbnRlbnRBY3Rpb25zIiwiZXZlbnRBY3Rpb25zIiwiZ3JvdXAiLCJncm91cEFjdGlvbnMiLCJpbWFnZUFjdGlvbnMiLCJsb2NhdGlvbkFjdGlvbnMiLCJtZXNzYWdlQWN0aW9ucyIsInBlcm1pc3Npb25BY3Rpb25zIiwicG9zdEFjdGlvbnMiLCJwZXJzb25hQWN0aW9ucyIsInJlYWN0aW9uQWN0aW9ucyIsInN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbkFjdGlvbnMiLCJ0YWdBY3Rpb25zIiwidHJhbnNsYXRpb25BY3Rpb25zIiwidXNlckFjdGlvbnMiLCJ2aWRlb0FjdGlvbnMiLCJ3ZWJzb2NrZXQiLCJ3ZWJzb2NrZXRBY3Rpb25zIiwidXNlTWV0cm9wb2xpcyIsImFjdGlvblR5cGVzIiwiY29udGV4dCIsImNvbnRleHRGbHV4IiwiZmx1eCIsImhvb2tGbHV4IiwiYWN0aW9uT3B0aW9ucyIsImxlbmd0aCIsImFsbEFjdGlvbnMiLCJqb2luIiwidXNlTWV0cm9wb2xpc0NvbmZpZyIsImNvbmZpZyIsIkVycm9yIiwidXNlTWV0cm9wb2xpc0ZsdXgiLCJ1c2VDb250ZW50QWN0aW9ucyIsInVzZUV2ZW50QWN0aW9ucyIsInVzZUdyb3VwQWN0aW9ucyIsInVzZUltYWdlQWN0aW9ucyIsInVzZUxvY2F0aW9uQWN0aW9ucyIsInVzZU1lc3NhZ2VBY3Rpb25zIiwidXNlU3Vic2NyaXB0aW9uQWN0aW9ucyIsInVzZVBlcm1pc3Npb25BY3Rpb25zIiwidXNlUG9zdEFjdGlvbnMiLCJ1c2VQZXJzb25hQWN0aW9ucyIsInVzZVJlYWN0aW9uQWN0aW9ucyIsInVzZVRhZ0FjdGlvbnMiLCJ1c2VWaWRlb0FjdGlvbnMiLCJ1c2VUcmFuc2xhdGlvbkFjdGlvbnMiLCJ1c2VVc2VyQWN0aW9ucyIsInVzZVdlYnNvY2tldEFjdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLE9BQU8sUUFBTyw4QkFBOEI7QUFDcEQsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sUUFBUTtBQUkxQyxTQUFRQyxhQUFhLEVBQUVDLGdCQUFnQixRQUFPLDRCQUE0QjtBQUUxRSxTQUFRQyxpQkFBaUIsUUFBTywwQkFBMEI7QUFHMUQ7O0NBRUMsR0FDRCxNQUFNQyxxQkFBcUIsQ0FDekJDO0lBRUEsSUFBSSxDQUFDQSxVQUFVO1FBQ2IsT0FBTyxDQUFDO0lBQ1Y7SUFFQSxNQUFNQyxVQUFzRCxDQUFDO0lBRTdELElBQUlELFNBQVNFLE9BQU8sRUFBRTtRQUNwQkQsUUFBUUUsT0FBTyxHQUFHO1lBQUNDLGdCQUFnQkosU0FBU0UsT0FBTztRQUFBO0lBQ3JEO0lBQ0EsSUFBSUYsU0FBU0ssS0FBSyxFQUFFO1FBQ2xCSixRQUFRSyxLQUFLLEdBQUc7WUFBQ0MsY0FBY1AsU0FBU0ssS0FBSztRQUFBO0lBQy9DO0lBQ0EsSUFBSUwsU0FBU1EsS0FBSyxFQUFFO1FBQ2xCUCxRQUFRUSxLQUFLLEdBQUc7WUFBQ0MsY0FBY1YsU0FBU1EsS0FBSztRQUFBO0lBQy9DO0lBQ0EsSUFBSVIsU0FBU1csUUFBUSxFQUFFO1FBQ3JCVixRQUFRVyxRQUFRLEdBQUc7WUFBQ0MsaUJBQWlCYixTQUFTVyxRQUFRO1FBQUE7SUFDeEQ7SUFDQSxJQUFJWCxTQUFTYyxPQUFPLEVBQUU7UUFDcEJiLFFBQVFjLE9BQU8sR0FBRztZQUFDQyxnQkFBZ0JoQixTQUFTYyxPQUFPO1FBQUE7SUFDckQ7SUFDQSxJQUFJZCxTQUFTaUIs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
@@ -0,0 +1,16 @@
1
+ export interface UseTranslationsOptions {
2
+ readonly locale?: string;
3
+ readonly namespace?: string;
4
+ readonly autoProcess?: boolean;
5
+ readonly processInterval?: number;
6
+ }
7
+ export interface UseTranslationsReturn {
8
+ readonly t: (key: string, fallback?: string) => string;
9
+ readonly hasTranslation: (key: string) => boolean;
10
+ readonly queueTranslation: (key: string) => void;
11
+ readonly processPending: () => Promise<void>;
12
+ readonly isLoading: boolean;
13
+ readonly error: Error | null;
14
+ }
15
+ export declare const useTranslations: (options?: UseTranslationsOptions) => UseTranslationsReturn;
16
+ //# sourceMappingURL=useTranslations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslations.d.ts","sourceRoot":"","sources":["../../src/utils/useTranslations.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,eAAe,GAAI,UAAS,sBAA2B,KAAG,qBA+FtE,CAAC"}