diff --git a/native/calendar/entry.react.js b/native/calendar/entry.react.js --- a/native/calendar/entry.react.js +++ b/native/calendar/entry.react.js @@ -35,6 +35,7 @@ import { colorIsDark } from 'lib/shared/color-utils.js'; import { entryKey } from 'lib/shared/entry-utils.js'; import { useThreadHasPermission } from 'lib/shared/thread-utils.js'; +import { useTunnelbroker } from 'lib/tunnelbroker/tunnelbroker-context.js'; import type { CalendarQuery, CreateEntryPayload, @@ -851,7 +852,7 @@ const threadInfo = useResolvedThreadInfo(unresolvedThreadInfo); const keyserverID = extractKeyserverIDFromIDOptional(threadInfo.id); - const connection = useSelector(state => { + const keyserverConnectionStatus = useSelector(state => { if (!keyserverID) { return { status: 'connected', @@ -859,11 +860,15 @@ } return connectionSelector(keyserverID)(state); }); + const { socketState } = useTunnelbroker(); invariant( - connection, + keyserverConnectionStatus, `keyserver ${keyserverID ?? 'null'} missing from keyserverStore`, ); - const online = connection.status === 'connected'; + + const online = threadTypeIsThick(threadInfo.type) + ? !!socketState.connected + : keyserverConnectionStatus.status === 'connected'; const canEditEntry = useThreadHasPermission( threadInfo, diff --git a/web/calendar/entry.react.js b/web/calendar/entry.react.js --- a/web/calendar/entry.react.js +++ b/web/calendar/entry.react.js @@ -26,6 +26,7 @@ import { colorIsDark } from 'lib/shared/color-utils.js'; import { entryKey } from 'lib/shared/entry-utils.js'; import { useThreadHasPermission } from 'lib/shared/thread-utils.js'; +import { useTunnelbroker } from 'lib/tunnelbroker/tunnelbroker-context.js'; import { type EntryInfo, type SaveEntryResult, @@ -516,13 +517,20 @@ threadPermissions.EDIT_ENTRIES, ); const calendarQuery = useSelector(nonThreadCalendarQuery); + const { socketState } = useTunnelbroker(); + const keyserverID = extractKeyserverIDFromIDOptional(threadID); - const online = useSelector(state => { + const keyserverConnectionStatus = useSelector(state => { if (!keyserverID) { return true; } return connectionSelector(keyserverID)(state) === 'connected'; }); + + const online = threadTypeIsThick(threadInfo.type) + ? !!socketState.connected + : keyserverConnectionStatus; + const callCreateEntry = useCreateEntry(); const callSaveEntry = useSaveEntry(); const callDeleteEntry = useDeleteEntry();