Remove non-null assertion in ConversationProvider

- Add `createOptionalContext` that is used by `AuthContext` and `ConversationContext` to create a context with a hook
  that can be used to retrieve its value and throw an error if it's undefined.
- In `router.tsx`, put `Messenger` inside `ConversationProvider`.
- In `ConversationListItem`, use the conversationId from the `ConversationContext ` instead of the url params.
- Fix bug in `CallInterface` with fullscreen.
- Remove unecessary useEffect dependency in `NotificationManager`.

Change-Id: Ib5f0ae6a0a34cdbdb02f871e36194376d945230d
diff --git a/client/src/router.tsx b/client/src/router.tsx
index 7bbddd4..8ed3403 100644
--- a/client/src/router.tsx
+++ b/client/src/router.tsx
@@ -79,11 +79,11 @@
           <Route
             path="conversation/:conversationId"
             element={
-              <Messenger>
-                <ConversationProvider>
+              <ConversationProvider>
+                <Messenger>
                   <Outlet />
-                </ConversationProvider>
-              </Messenger>
+                </Messenger>
+              </ConversationProvider>
             }
           >
             <Route index element={<ConversationView />} />