diff --git a/src/frontend/packages/activitypub-components/dist/index.cjs.js b/src/frontend/packages/activitypub-components/dist/index.cjs.js
index 94b9caa00..e4a32444f 100644
--- a/src/frontend/packages/activitypub-components/dist/index.cjs.js
+++ b/src/frontend/packages/activitypub-components/dist/index.cjs.js
@@ -156,24 +156,33 @@ const $5ca5f7e9fc1c3544$var$useItemsFromPages = (pages, dereferenceItems)=>{
itemUri
],
queryFn: async ()=>(await dataProvider.fetch(itemUri)).json,
- staleTime: Infinity
+ staleTime: Infinity // Activities are immutable, so no need to refetch..
})));
- if (!shouldDereference) return {
- loadedItems: items,
- isLoading: false,
- isFetching: false
- };
// Put all loaded items together (might be dereferenced already, so concatenate).
- const loadedItems = items.filter((item)=>typeof item !== "string").concat(itemQueries.flatMap((itemQuery)=>{
- return itemQuery.isSuccess && itemQuery.data || [];
- }));
- const errors = itemQueries.filter((q)=>q.error);
- return {
- loadedItems: loadedItems,
- isLoading: itemQueries.some((q)=>q.isLoading),
- isFetching: itemQueries.some((q)=>q.isFetching),
- errors: errors.length > 0 ? errors : undefined
- };
+ const loadedItems = (0, $583VT$react.useMemo)(()=>items.filter((item)=>typeof item !== "string").concat(itemQueries.flatMap((itemQuery)=>{
+ return itemQuery.isSuccess && itemQuery.data || [];
+ })), [
+ items,
+ itemQueries
+ ]);
+ const errors = (0, $583VT$react.useMemo)(()=>itemQueries.filter((q)=>q.error), [
+ itemQueries
+ ]);
+ const isLoading = itemQueries.some((q)=>q.isLoading);
+ const isFetching = itemQueries.some((q)=>q.isFetching);
+ const errorsFormatted = (0, $583VT$react.useMemo)(()=>errors.length > 0 ? errors : undefined, [
+ errors
+ ]);
+ return (0, $583VT$react.useMemo)(()=>({
+ loadedItems: loadedItems,
+ isLoading: isLoading,
+ isFetching: isFetching,
+ errors: errorsFormatted
+ }), [
+ loadedItems,
+ itemQueries,
+ errorsFormatted
+ ]);
};
/**
* Subscribe a collection. Supports pagination.
@@ -236,7 +245,10 @@ const $5ca5f7e9fc1c3544$var$useItemsFromPages = (pages, dereferenceItems)=>{
});
// Put all items together in a list (and dereference, if required).
const { loadedItems: items, isLoading: isLoadingItems, isFetching: isFetchingItems, errors: itemErrors } = $5ca5f7e9fc1c3544$var$useItemsFromPages(pageData?.pages ?? $5ca5f7e9fc1c3544$var$emptyArray, dereferenceItems);
- const allErrors = (0, $03510abb28fd3d8a$export$e57ff0f701c44363)(collectionError).concat((0, $03510abb28fd3d8a$export$e57ff0f701c44363)(itemErrors));
+ const allErrors = (0, $583VT$react.useMemo)(()=>(0, $03510abb28fd3d8a$export$e57ff0f701c44363)(collectionError).concat((0, $03510abb28fd3d8a$export$e57ff0f701c44363)(itemErrors)), [
+ collectionError,
+ itemErrors
+ ]);
const addItem = (0, $583VT$react.useCallback)((item, shouldRefetch = true)=>{
queryClient.setQueryData([
"collection",
@@ -368,23 +380,39 @@ const $5ca5f7e9fc1c3544$var$useItemsFromPages = (pages, dereferenceItems)=>{
webSocketRef,
liveUpdates
]);
- return {
- items: items,
- totalItems: totalItems,
- error: allErrors.length > 0 && allErrors,
- refetch: refetch,
- fetchNextPage: fetchNextPage,
- addItem: addItem,
- removeItem: removeItem,
- hasNextPage: hasNextPage,
- isLoading: isLoadingPage || isLoadingItems,
- isFetching: isFetchingPage || isFetchingItems,
- isFetchingNextPage: isFetchingNextPage,
- url: collectionUrl,
- hasLiveUpdates: hasLiveUpdates,
- awaitWebSocketConnection: awaitWebSocketConnection,
- webSocketRef: webSocketRef
- };
+ return (0, $583VT$react.useMemo)(()=>({
+ items: items,
+ totalItems: totalItems,
+ error: allErrors.length > 0 && allErrors,
+ refetch: refetch,
+ fetchNextPage: fetchNextPage,
+ addItem: addItem,
+ removeItem: removeItem,
+ hasNextPage: hasNextPage,
+ isLoading: isLoadingPage || isLoadingItems,
+ isFetching: isFetchingPage || isFetchingItems,
+ isFetchingNextPage: isFetchingNextPage,
+ url: collectionUrl,
+ hasLiveUpdates: hasLiveUpdates,
+ awaitWebSocketConnection: awaitWebSocketConnection,
+ webSocketRef: webSocketRef
+ }), [
+ items,
+ totalItems,
+ allErrors.length > 0 && allErrors,
+ refetch,
+ fetchNextPage,
+ addItem,
+ removeItem,
+ hasNextPage,
+ isLoadingPage || isLoadingItems,
+ isFetchingPage || isFetchingItems,
+ isFetchingNextPage,
+ collectionUrl,
+ hasLiveUpdates,
+ awaitWebSocketConnection,
+ webSocketRef
+ ]);
};
var $5ca5f7e9fc1c3544$export$2e2bcd8739ae039 = $5ca5f7e9fc1c3544$var$useCollection;
diff --git a/src/frontend/packages/activitypub-components/dist/index.cjs.js.map b/src/frontend/packages/activitypub-components/dist/index.cjs.js.map
index 56957a5ea..de187e8cf 100644
--- a/src/frontend/packages/activitypub-components/dist/index.cjs.js.map
+++ b/src/frontend/packages/activitypub-components/dist/index.cjs.js.map
@@ -1 +1 @@
-{"mappings":"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","sources":["packages/activitypub-components/src/index.ts","packages/activitypub-components/src/components/CommentsField/CommentsField.js","packages/activitypub-components/src/components/CommentsField/PostCommentForm.js","packages/activitypub-components/src/constants.js","packages/activitypub-components/src/hooks/useOutbox.ts","packages/activitypub-components/src/hooks/useCollection.ts","packages/activitypub-components/src/utils.ts","packages/activitypub-components/src/hooks/useAwaitActivity.ts","packages/activitypub-components/src/components/CommentsField/CustomMention.js","packages/activitypub-components/src/components/CommentsField/CommentsList.js","packages/activitypub-components/src/components/CollectionList.js","packages/activitypub-components/src/components/ReferenceCollectionField.js","packages/activitypub-components/src/hooks/useInbox.ts","packages/activitypub-components/src/hooks/useNodeinfo.ts","packages/activitypub-components/src/hooks/useWebfinger.js","packages/activitypub-components/src/hooks/useMentions/useMentions.js","packages/activitypub-components/src/hooks/useMentions/renderMentions.js","packages/activitypub-components/src/hooks/useMentions/MentionsList.js"],"sourcesContent":["// Components\nexport { default as CommentsField } from './components/CommentsField/CommentsField';\nexport { default as CollectionList } from './components/CollectionList';\nexport { default as ReferenceCollectionField } from './components/ReferenceCollectionField';\n\n// Hooks\nexport { default as useCollection } from './hooks/useCollection';\nexport { default as useInbox } from './hooks/useInbox';\nexport { default as useNodeinfo } from './hooks/useNodeinfo';\nexport { default as useOutbox } from './hooks/useOutbox';\nexport { default as useWebfinger } from './hooks/useWebfinger';\nexport { default as useMentions } from './hooks/useMentions/useMentions';\n\n// Constants\nexport { ACTIVITY_TYPES, ACTOR_TYPES, OBJECT_TYPES, PUBLIC_URI } from './constants';\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport PostCommentForm from './PostCommentForm';\nimport CommentsList from './CommentsList';\nimport useCollection from '../../hooks/useCollection';\n\nconst CommentsField = ({ source, context, helperText, placeholder, userResource, mentions }) => {\n const record = useRecordContext();\n const { items: comments, loading, addItem, removeItem } = useCollection(record.replies);\n if (!userResource) throw new Error('No userResource defined for CommentsField');\n return (\n <>\n \n \n >\n );\n};\n\nCommentsField.defaultProps = {\n label: 'Commentaires',\n placeholder: 'Commencez à taper votre commentaire...',\n source: 'id', // Ensure the field is always displayed\n context: 'id'\n};\n\nexport default CommentsField;\n","import React, { useState, useCallback } from 'react';\nimport { Form, useGetIdentity, useNotify, useRecordContext } from 'react-admin';\nimport { RichTextInput, DefaultEditorOptions } from 'ra-input-rich-text';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { Button, Box, Avatar } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport SendIcon from '@mui/icons-material/Send';\nimport { useDataModel } from '@semapps/semantic-data-provider';\nimport { AuthDialog } from '@semapps/auth-provider';\nimport { OBJECT_TYPES, PUBLIC_URI } from '../../constants';\nimport useOutbox from '../../hooks/useOutbox';\nimport CustomMention from './CustomMention';\n\nconst useStyles = makeStyles(theme => ({\n form: {\n marginTop: -12 // Negative margin to keep the form close to the label\n },\n container: {\n paddingLeft: 80,\n position: 'relative'\n },\n avatar: {\n position: 'absolute',\n top: 16,\n left: 0,\n bottom: 0,\n width: 64,\n height: 64\n },\n editorContent: {\n '& > div': {\n backgroundColor: 'rgba(0, 0, 0, 0.09)',\n padding: '2px 12px',\n borderWidth: '0px !important',\n borderRadius: 0,\n borderBottom: '1px solid #FFF',\n minHeight: 60,\n outline: 'unset !important'\n },\n '& > div > p': {\n marginTop: 12,\n marginBottom: 12,\n fontFamily: theme.typography.body1.fontFamily,\n marginBlockStart: '0.5em',\n marginBlockEnd: '0.5em'\n },\n '& > div > p.is-editor-empty:first-child::before': {\n color: 'grey',\n content: 'attr(data-placeholder)',\n float: 'left',\n height: 0,\n pointerEvents: 'none'\n }\n },\n button: {\n marginTop: -10, // To go over helper text block\n marginBottom: 15\n }\n}));\n\nconst EmptyToolbar = () => null;\n\nconst PostCommentForm = ({ context, placeholder, helperText, mentions, userResource, addItem, removeItem }) => {\n const record = useRecordContext();\n const { data: identity, isLoading } = useGetIdentity();\n const userDataModel = useDataModel(userResource);\n const classes = useStyles();\n const notify = useNotify();\n const outbox = useOutbox();\n const [expanded, setExpanded] = useState(false);\n const [openAuth, setOpenAuth] = useState(false);\n\n const onSubmit = useCallback(\n async values => {\n const document = new DOMParser().parseFromString(values.comment, 'text/html');\n const mentions = Array.from(document.body.getElementsByClassName('mention'));\n const mentionedUsersUris = [];\n\n mentions.forEach(node => {\n const userUri = node.attributes['data-mention-id'].value;\n const userLabel = node.attributes['data-mention-label'].value;\n const link = document.createElement('a');\n link.setAttribute(\n 'href',\n `${new URL(window.location.href).origin}/${userResource}/${encodeURIComponent(userUri)}/show`\n );\n link.textContent = `@${userLabel}`;\n node.parentNode.replaceChild(link, node);\n mentionedUsersUris.push(userUri);\n });\n\n if (document.body.innerHTML === 'undefined') {\n notify('Votre commentaire est vide', { type: 'error' });\n } else {\n const tempId = Date.now();\n\n const note = {\n type: OBJECT_TYPES.NOTE,\n attributedTo: outbox.owner,\n content: document.body.innerHTML,\n inReplyTo: record[context],\n published: new Date().toISOString()\n };\n\n try {\n addItem({ id: tempId, ...note });\n // TODO reset the form\n setExpanded(false);\n await outbox.post({ ...note, to: [...mentionedUsersUris, PUBLIC_URI] });\n notify('Commentaire posté avec succès', { type: 'success' });\n } catch (e) {\n console.error(e);\n removeItem(tempId);\n notify(e.message, { type: 'error' });\n }\n }\n },\n [outbox, notify, setExpanded, addItem, removeItem]\n );\n\n const openAuthIfDisconnected = useCallback(() => {\n if (!identity?.id) {\n setOpenAuth(true);\n }\n }, [identity, setOpenAuth]);\n\n // Don't init the editor options until mentions and identity are loaded, as they can only be initialized once\n if ((mentions && !mentions.items) || isLoading) return null;\n\n return (\n <>\n
\n setOpenAuth(false)}\n message=\"Pour poster un commentaire, vous devez être connecté.\"\n />\n >\n );\n};\n\nexport default PostCommentForm;\n","export const ACTIVITY_TYPES = {\n ACCEPT: 'Accept',\n ADD: 'Add',\n ANNOUNCE: 'Announce',\n ARRIVE: 'Arrive',\n BLOCK: 'Block',\n CREATE: 'Create',\n DELETE: 'Delete',\n DISLIKE: 'Dislike',\n FLAG: 'Flag',\n FOLLOW: 'Follow',\n IGNORE: 'Ignore',\n INVITE: 'Invite',\n JOIN: 'Join',\n LEAVE: 'Leave',\n LIKE: 'Like',\n LISTEN: 'Listen',\n MOVE: 'Move',\n OFFER: 'Offer',\n QUESTION: 'Question',\n REJECT: 'Reject',\n READ: 'Read',\n REMOVE: 'Remove',\n TENTATIVE_REJECT: 'TentativeReject',\n TENTATIVE_ACCEPT: 'TentativeAccept',\n TRAVEL: 'Travel',\n UNDO: 'Undo',\n UPDATE: 'Update',\n VIEW: 'View'\n};\n\nexport const ACTOR_TYPES = {\n APPLICATION: 'Application',\n GROUP: 'Group',\n ORGANIZATION: 'Organization',\n PERSON: 'Person',\n SERVICE: 'Service'\n};\n\nexport const OBJECT_TYPES = {\n ARTICLE: 'Article',\n AUDIO: 'Audio',\n DOCUMENT: 'Document',\n EVENT: 'Event',\n IMAGE: 'Image',\n NOTE: 'Note',\n PAGE: 'Page',\n PLACE: 'Place',\n PROFILE: 'Profile',\n RELATIONSHIP: 'Relationship',\n TOMBSTONE: 'Tombstone',\n VIDEO: 'Video'\n};\n\nexport const PUBLIC_URI = 'https://www.w3.org/ns/activitystreams#Public';\n","import { useCallback } from 'react';\nimport { useDataProvider, useGetIdentity } from 'react-admin';\nimport { SemanticDataProvider } from '@semapps/semantic-data-provider';\nimport useCollection from './useCollection';\nimport useAwaitActivity from './useAwaitActivity';\nimport type { UseCollectionOptions } from '../types';\n\n/**\n * Hook to fetch and post to the outbox of the logged user.\n * Returns the same data as the useCollection hooks, plus:\n * - `post`: a function to post a new activity in the user's outbox\n * - `awaitActivity`: a function to wait for a certain activity to be posted\n * - `owner`: the WebID of the outbox's owner\n * See https://semapps.org/docs/frontend/activitypub-components#useoutbox for usage\n * @param {UseCollectionOptions} options Defaults to `{ dereferenceItems: false, liveUpdates: false }`\n */\nconst useOutbox = (options: UseCollectionOptions = {}) => {\n const dataProvider = useDataProvider();\n const { data: identity } = useGetIdentity();\n const { url, items, awaitWebSocketConnection, ...rest } = useCollection('outbox', options);\n const awaitActivity = useAwaitActivity(awaitWebSocketConnection, items);\n\n // Post an activity to the logged user's outbox and return its URI\n const post = useCallback(\n async (activity: object) => {\n if (!url) {\n throw new Error(\n 'Cannot post to outbox before user identity is loaded. Please use the isLoading argument of useOutbox'\n );\n }\n const { headers } = await dataProvider.fetch(url, {\n method: 'POST',\n body: JSON.stringify({\n '@context': 'https://www.w3.org/ns/activitystreams',\n ...activity\n })\n });\n return headers.get('Location');\n },\n [url, dataProvider]\n );\n\n return { url, items, awaitWebSocketConnection, post, awaitActivity, owner: identity?.id, ...rest };\n};\n\nexport default useOutbox;\n","import { useCallback, useMemo, useState, useEffect, useRef, RefObject } from 'react';\nimport { useGetIdentity, useDataProvider } from 'react-admin';\nimport { QueryFunction, useInfiniteQuery, useQueries, useQueryClient } from 'react-query';\nimport { getOrCreateWsChannel, SemanticDataProvider } from '@semapps/semantic-data-provider';\nimport { arrayOf } from '../utils';\nimport type { UseCollectionOptions, SolidNotification, AwaitActivityOptions } from '../types';\n\n// Used to avoid re-renders\nconst emptyArray: never[] = [];\n\nconst useItemsFromPages = (pages: any[], dereferenceItems: boolean) => {\n const dataProvider = useDataProvider();\n const items = useMemo(() => pages.flatMap(p => arrayOf(p.orderedItems || p.items)), [pages]);\n\n // We will force dereference, if some items are not URI string references.\n const shouldDereference = useMemo(() => {\n return dereferenceItems || items.some(item => typeof item !== 'string');\n }, [dereferenceItems, items]);\n\n // Dereference all items, if necessary (even if shouldDereference is false, the hook needs to be called).\n const itemQueries = useQueries(\n !shouldDereference\n ? emptyArray\n : items\n .filter(item => typeof item === 'string')\n .map(itemUri => ({\n queryKey: ['resource', itemUri],\n queryFn: async () => (await dataProvider.fetch(itemUri)).json,\n staleTime: Infinity\n }))\n );\n\n if (!shouldDereference) {\n return { loadedItems: items, isLoading: false, isFetching: false };\n }\n\n // Put all loaded items together (might be dereferenced already, so concatenate).\n const loadedItems = items\n .filter(item => typeof item !== 'string')\n .concat(\n itemQueries.flatMap(itemQuery => {\n return (itemQuery.isSuccess && itemQuery.data) || [];\n })\n );\n\n const errors = itemQueries.filter(q => q.error);\n return {\n loadedItems,\n isLoading: itemQueries.some(q => q.isLoading),\n isFetching: itemQueries.some(q => q.isFetching),\n errors: errors.length > 0 ? errors : undefined\n };\n};\n\n/**\n * Subscribe a collection. Supports pagination.\n * @param predicateOrUrl The collection URI or the predicate to get the collection URI from the identity (webId).\n * @param {UseCollectionOptions} options Defaults to `{ dereferenceItems: false, liveUpdates: false }`\n */\nconst useCollection = (predicateOrUrl: string, options: UseCollectionOptions = {}) => {\n const { dereferenceItems = false, liveUpdates = false } = options;\n const { data: identity } = useGetIdentity();\n const [totalItems, setTotalItems] = useState(0);\n const queryClient = useQueryClient();\n const [hasLiveUpdates, setHasLiveUpdates] = useState<{ status: string; error?: any }>({\n status: 'connecting'\n });\n const dataProvider = useDataProvider();\n const webSocketRef = useRef(null);\n\n // Get collectionUrl from webId predicate or URL.\n const collectionUrl = useMemo(() => {\n if (predicateOrUrl) {\n if (predicateOrUrl.startsWith('http')) {\n return predicateOrUrl;\n }\n if (identity?.webIdData) {\n return identity?.webIdData?.[predicateOrUrl];\n }\n }\n return undefined;\n // throw new Error(`No URL available for useCollection: ${predicateOrUrl}.`);\n }, [identity, predicateOrUrl]);\n\n // Fetch page of collection item references (if pageParam provided)\n // or default to `collectionUrl` (which should give you the first page).\n const fetchCollection: QueryFunction = useCallback(\n async ({ pageParam: nextPageUrl }) => {\n // Fetch page or first page (collectionUrl)\n let { json } = await dataProvider.fetch(nextPageUrl || collectionUrl);\n if (json.totalItems) setTotalItems(json.totalItems);\n\n // If first page, handle this here.\n if ((json.type === 'OrderedCollection' || json.type === 'Collection') && json.first) {\n if (json.first?.items) {\n if (json.first?.items.length === 0 && json.first?.next) {\n // Special case where the first property is an object without items\n ({ json } = await dataProvider.fetch(json.first?.next));\n } else {\n json = json.first;\n }\n } else {\n // Fetch the first page\n ({ json } = await dataProvider.fetch(json.first));\n }\n }\n\n return json;\n },\n [dataProvider, collectionUrl, identity, setTotalItems]\n );\n\n // Use infiniteQuery to handle pagination, fetching, etc.\n const {\n data: pageData,\n error: collectionError,\n fetchNextPage,\n refetch,\n hasNextPage,\n isLoading: isLoadingPage,\n isFetching: isFetchingPage,\n isFetchingNextPage\n } = useInfiniteQuery(['collection', { collectionUrl }], fetchCollection, {\n enabled: !!(collectionUrl && identity?.id),\n getNextPageParam: (lastPage: any) => lastPage.next,\n getPreviousPageParam: (firstPage: any) => firstPage.prev\n });\n\n // Put all items together in a list (and dereference, if required).\n const {\n loadedItems: items,\n isLoading: isLoadingItems,\n isFetching: isFetchingItems,\n errors: itemErrors\n } = useItemsFromPages(pageData?.pages ?? emptyArray, dereferenceItems);\n\n const allErrors = arrayOf(collectionError).concat(arrayOf(itemErrors));\n\n const addItem = useCallback(\n (item: string | any, shouldRefetch: boolean | number = true) => {\n queryClient.setQueryData(['collection', { collectionUrl }], (oldData: any) => {\n if (!oldData) return oldData;\n setTotalItems(totalItems => totalItems + 1);\n\n // Destructure, so react knows, it needs to re-render the pages.\n const pages = [...oldData.pages];\n\n if (pages?.[0]?.orderedItems) {\n pages[0].orderedItems = [item, ...arrayOf(pages[0].orderedItems)];\n } else if (pages?.[0]?.items) {\n pages[0].items = [item, ...arrayOf(pages[0].items)];\n }\n\n oldData.pages = pages;\n return oldData;\n });\n if (shouldRefetch) {\n setTimeout(\n () =>\n queryClient.refetchQueries(['collection', { collectionUrl }], {\n active: true,\n exact: true\n }),\n typeof shouldRefetch === 'number' ? shouldRefetch : 2000\n );\n }\n },\n [queryClient, collectionUrl, setTotalItems]\n );\n\n const removeItem = useCallback(\n (item: string | any, shouldRefetch: boolean = true) => {\n queryClient.setQueryData(['collection', { collectionUrl }], (oldData: any) => {\n if (!oldData) return oldData;\n setTotalItems(totalItems => totalItems - 1);\n\n // Destructure, so react knows, it needs to re-render the pages array.\n const pages = [...oldData.pages];\n // Find the item in all pages and remove the item to be removed (either item.id or just item)\n pages.forEach(page => {\n if (page.orderedItems) {\n page.orderedItems = arrayOf(page.orderedItems).filter((i: any) => (i.id || i) !== (item.id || item));\n } else if (page.items) {\n page.items = arrayOf(page.items).filter((i: any) => (i.id || i) !== (item?.id || item));\n }\n });\n\n oldData.pages = pages;\n return oldData;\n });\n if (shouldRefetch) {\n setTimeout(\n () =>\n queryClient.refetchQueries(['collection', { collectionUrl }], {\n active: true,\n exact: true\n }),\n typeof shouldRefetch === 'number' ? shouldRefetch : 2000\n );\n }\n },\n [queryClient, collectionUrl, setTotalItems]\n );\n\n // Live Updates\n useEffect(() => {\n if (liveUpdates && collectionUrl) {\n // Create ws that listens to collectionUri changes\n getOrCreateWsChannel(dataProvider.fetch, collectionUrl)\n .then(ws => {\n webSocketRef.current = ws; // Keep a ref to the webSocket so that it can be used elsewhere\n webSocketRef.current.addEventListener('message', e => {\n const data: SolidNotification = JSON.parse(e.data);\n if (data.type === 'Add') {\n addItem(data.object, true);\n } else if (data.type === 'Remove') {\n removeItem(data.object, true);\n }\n });\n webSocketRef.current.addEventListener('error', e => {\n setHasLiveUpdates({ status: 'error', error: e });\n // TODO: Retry after a while\n });\n webSocketRef.current.addEventListener('close', e => {\n if (!hasLiveUpdates.error) {\n setHasLiveUpdates({ ...hasLiveUpdates, status: 'closed' });\n }\n });\n setHasLiveUpdates({ status: 'connected' });\n })\n .catch(() => {}); // If it fails, we won't receive live updates. But that's okay.\n }\n }, [collectionUrl, liveUpdates, dataProvider, webSocketRef, addItem, removeItem, setHasLiveUpdates]);\n\n const awaitWebSocketConnection = useCallback(\n (options: AwaitActivityOptions = {}): Promise> => {\n const { timeout = 30000 } = options;\n if (!liveUpdates)\n throw new Error(`Cannot call awaitWebSocketConnection because the liveUpdates option is set to false`);\n return new Promise((resolve, reject) => {\n if (webSocketRef?.current) {\n resolve(webSocketRef);\n } else {\n const timeoutId = setTimeout(() => {\n reject(`No WebSocket connection found within ${Math.round(timeout / 1000)}s`);\n }, timeout);\n const intervalId = setInterval(() => {\n if (webSocketRef?.current) {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n resolve(webSocketRef);\n } else {\n console.log('WebSocket is not initialized yet, waiting...');\n }\n }, 100);\n }\n });\n },\n [webSocketRef, liveUpdates]\n );\n\n return {\n items,\n totalItems,\n error: allErrors.length > 0 && allErrors,\n refetch,\n fetchNextPage,\n addItem,\n removeItem,\n hasNextPage,\n isLoading: isLoadingPage || isLoadingItems,\n isFetching: isFetchingPage || isFetchingItems,\n isFetchingNextPage,\n url: collectionUrl,\n hasLiveUpdates,\n awaitWebSocketConnection,\n webSocketRef\n };\n};\n\nexport default useCollection;\n","export const arrayOf = (value: T | T[]) => {\n // If the field is null-ish, we suppose there are no values.\n if (value === null || value === undefined) {\n return [];\n }\n // Return as is.\n if (Array.isArray(value)) {\n return value;\n }\n // Single value is made an array.\n return [value];\n};\n\nexport default {\n arrayOf\n};\n\nexport const filterDuplicates = (iterable: T[], predicate: (item: T) => string) => {\n const seen = new Set();\n return iterable.filter(item => {\n const key = predicate(item);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n};\n","import { RefObject, useCallback } from 'react';\nimport { useDataProvider } from 'react-admin';\nimport { SemanticDataProvider } from '@semapps/semantic-data-provider';\nimport { SolidNotification, AwaitActivityOptions, AwaitWebSocketConnectionOptions } from '../types';\n\n/**\n * Hook used internally by useInbox and useOutbox. This is not exported.\n * @param awaitWebSocketConnection Promise returning the WebSocket which allow to listen to the inbox or outbox\n * @param existingActivities Partial list of activities already received in the inbox and outbox\n */\nconst useAwaitActivity = (\n awaitWebSocketConnection: (options?: AwaitWebSocketConnectionOptions) => Promise>,\n existingActivities?: Array