When previewing a room, we normally do not have a Room object. Currently, when the RoomPreviewBar is instantiated without a room, it doesn't raise the PreviewRoomNotLoggedIn and JoinFromRoomPreview module lifecycle events, meaning that modules are unable to intercept previews of non-peekable rooms.
To fix this, make sure that we pass the room ID into RoomPreviewBar irrespective of whether we have a Room object, and use it to raise the module lifecycle events.
Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
* Improve decryption error UI by consolidating error messages and providing instructions when possible
* Fix TS strict errors
* Rename .scss to .pcss
* Avoid accessing clipboard, Cypress doesn't like it
* Display DecryptionFailureBar alongside other AuxPanel bars
* Add comments
* Add small margin off-screen for visible decryption failures
* Fix some more TS strict errors
* Add unit tests for DecryptionFailureBar
* Add button to resend key requests manually
* Remove references to matrix-js-sdk crypto internals
* Add hysteresis to visible decryption failures
* Add comment
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Add comment
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Don't create empty div if we're not showing resend requests button
* cancel updateSessions on unmount
* Update unit tests
* Fix lint and implicit any
* Simplify visible event bounds checking
* Adjust cypress test descriptions
* Add percy snapshots
* Update src/components/structures/TimelinePanel.tsx
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Add comments on TimelinePanel IState
* comment
* Add names to percy snapshots
* Show Resend Key Requests button when there are sessions that haven't already been requested via this bar
* We no longer request keys from senders
* update i18n
* update expected text in cypress test
* don't download keys ourselves, update device info in response to updates from client
* fix ts strict errors
* visibledecryptionfailures undefined handling
* Fix implicitAny errors
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* super WIP POC for merging virtual room events into main timeline
* remove some debugs
* c
* add some todos
* remove hardcoded fake virtual user
* insert overlay events into main timeline without resorting main tl events
* remove more debugs
* add extra tick to roomview tests
* RoomView test case for virtual room
* test case for merged timeline
* make overlay event filter generic
* remove TODOs from LegacyCallEventGrouper
* tidy comments
* remove some newlines
* test timelinepanel room timeline event handling
* use newState.roomId
* fix strict errors in RoomView
* fix strict errors in TimelinePanel
* add type
* pr tweaks
* strict errors
* more strict fix
* strict error whackamole
* update ROomView tests to use rtl
* Add Stores and StoresContext and use it in MatrixChat and RoomView
Added a new kind of class:
- Add God object `Stores` which will hold refs to all known stores and the `MatrixClient`. This object is NOT a singleton.
- Add `StoresContext` to hold onto a ref of `Stores` for use inside components.
`StoresContext` is created via:
- Create `Stores` in `MatrixChat`, assigning the `MatrixClient` when we have one set. Currently sets the RVS to `RoomViewStore.instance`.
- Wrap `MatrixChat`s `render()` function in a `StoresContext.Provider` so it can be used anywhere.
`StoresContext` is currently only used in `RoomView` via the following changes:
- Remove the HOC, which redundantly set `mxClient` as a prop. We don't need this as `RoomView` was using the client from `this.context`.
- Change the type of context accepted from `MatrixClientContext` to `StoresContext`.
- Modify alllll the places where `this.context` is used to interact with the client and suffix `.client`.
- Modify places where we use `RoomViewStore.instance` and replace them with `this.context.roomViewStore`.
This makes `RoomView` use a non-global instance of RVS.
* Linting
* SDKContext and make client an optional constructor arg
* Move SDKContext to /src/contexts
* Inject all RVS deps
* Linting
* Remove reset calls; deep copy the INITIAL_STATE to avoid test pollution
* DI singletons used in RoomView; DI them in RoomView-test too
* Initial RoomViewStore.instance after all files are imported to avoid cyclical deps
* Lazily init stores to allow for circular dependencies
Rather than stores accepting a list of other stores in their constructors,
which doesn't work when A needs B and B needs A, make new-style stores simply
accept Stores. When a store needs another store, they access it via `Stores`
which then lazily constructs that store if it needs it. This breaks the
circular dependency at constructor time, without needing to introduce
wiring diagrams or any complex DI framework.
* Delete RoomViewStore.instance
Replaced with Stores.instance.roomViewStore
* Linting
* Move OverridableStores to test/TestStores
* Rejig how eager stores get made; don't automatically do it else tests break
* Linting
* Linting and review comments
* Fix new code to use Stores.instance
* s/Stores/SdkContextClass/g
* Update docs
* Remove unused imports
* Update src/stores/RoomViewStore.tsx
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove empty c'tor to make sonar happy
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Update our cancel icon
The cancel icon we're using in the app has drifted out of sync with the ones used in our designs. We also had two identical-looking icons, so this consolidates them into one.
I've simultaneously updated our chevron icons, since in the case of the 'jump to unread' timeline button, it became clear that the weight of the new close icon did not match the thinner chevron.
* Don't squish bottom/top-aligned tooltips near the edge of the screen
* Close the timeline panel when returning to the fullscreen timeline view
* Add layout switching capabilities to ElementCall
* Bring the room header in line with the group call designs
* Bring the PiP header in line with the group call designs
* Fix lints
* Clarify tooltip CSS calculations
* Test PipView
* Expand RoomHeader test coverage
* Test PipView more
* Create m.room calls in video rooms, and m.prompt calls otherwise
* Terminate a call when the last person leaves
* Hook up the room header button to a unified CallView component
* Write more tests
* Make useEventEmitterState more efficient
By not invoking the initializing function on every render
* Make useWidgets more efficient
By not calling WidgetStore on every render
* Add new group call experience Labs flag
* Add viewingCall field to RoomViewStore state
Currently has no effect, but in the future this will signal to RoomView to show the call or call lobby.
* Add element_call.use_exclusively config flag
As documented in element-web, this will tell the app to use Element Call exclusively for calls, disabling Jitsi and legacy 1:1 calls.
* Make placeCall return a promise
So that the UI can know when placeCall completes
* Update start call buttons to new group call designs
Since RoomView doesn't do anything with viewingCall yet, these buttons won't have any effect when starting native group calls, but the logic is at least all there and ready to be hooked up.
* Allow calls to be detected if the new group call experience is enabled
* Test the RoomHeader changes
* Iterate code
* refactor: convert RoomViewStore from flux Store to standard EventEmitter
Parts of a series of experimental changes to improve the design of stores.
* Use a gen5 store for RoomViewStore for now due to lock handling
* Revert "Use a gen5 store for RoomViewStore for now due to lock handling"
This reverts commit 1076af071d997d87b8ae0b0dcddfd1ae428665af.
* Add untilEmission and tweak untilDispatch; use it in RoomViewStore
* Add more RVS tests; remove custom room ID listener code and use EventEmitter
* Better comments
* Null guard `dis` as tests mock out `defaultDispatcher`
* Additional tests
* Add an element_call_url config option
* Add a labs flag for Element Call video rooms
* Add Element Call as another video rooms backend
* Consolidate event power level defaults
* Remember to clean up participantsExpirationTimer
* Fix a code smell
* Test the clean method
* Fix some strict mode errors
* Test that clean still works when there are no state events
* Test auto-approval of Element Call widget capabilities
* Deduplicate some code to placate SonarCloud
* Fix more strict mode errors
* Test that calls disconnect when leaving the room
* Test the get methods of JitsiCall and ElementCall more
* Test Call.ts even more
* Test creation of Element video rooms
* Test that createRoom works for non-video-rooms
* Test Call's get method rather than the methods of derived classes
* Ensure that the clean method is able to preserve devices
* Remove duplicate clean method
* Fix lints
* Fix some strict mode errors in RoomPreviewCard
* Test RoomPreviewCard changes
* Quick and dirty hotfix for the community testing session
* Revert "Quick and dirty hotfix for the community testing session"
This reverts commit 37056514fbc040aaf1bff2539da770a1c8ba72a2.
* Fix the event schema for org.matrix.msc3401.call.member devices
* Remove org.matrix.call_duplicate_session from Element Call capabilities
It's no longer used by Element Call when running as a widget.
* Replace element_call_url with a map
* Make PiPs work for virtual widgets
* Auto-approve room timeline capability
Because Element Call uses this now
* Create a reusable isVideoRoom util
* Improve accessibility and testability of Tooltip
Adding a role to Tooltip was motivated by React Testing Library's
reliance on accessibility-related attributes to locate elements.
* Make the ReadyWatchingStore constructor safer
The ReadyWatchingStore constructor previously had a chance to
immediately call onReady, which was dangerous because it was potentially
calling the derived class's onReady at a point when the derived class
hadn't even finished construction yet. In normal usage, I guess this
never was a problem, but it was causing some of the tests I was writing
to crash. This is solved by separating out the onReady call into a start
method.
* Rename 1:1 call components to 'LegacyCall'
to reflect the fact that they're slated for removal, and to not clash
with the new Call code.
* Refactor VideoChannelStore into Call and CallStore
Call is an abstract class that currently only has a Jitsi
implementation, but this will make it easy to later add an Element Call
implementation.
* Remove WidgetReady, ClientReady, and ForceHangupCall hacks
These are no longer used by the new Jitsi call implementation, and can
be removed.
* yarn i18n
* Delete call map entries instead of inserting nulls
* Allow multiple active calls and consolidate call listeners
* Fix a race condition when creating a video room
* Un-hardcode the media device fallback labels
* Apply misc code review fixes
* yarn i18n
* Disconnect from calls more politely on logout
* Fix some strict mode errors
* Fix another updateRoom race condition
* Show chat panel when opening a video room with unread messages
* Remove unnecessary calls to private methods in tests
* Make room ID mandatory when toggling the right panel
* Restore the isViewingRoom check
* Test RightPanelStore
* Make the constructor private again
* Add even more tests
* Fix onReady
* Remove all mentions of Piwik
* Kill off all consumer of the old Piwik Analytics module
* Simplify ModalManager interface
* i18n
* Attempt to fix old e2e tests
* Remove unused component
* Iterate PR
* Use updates stable relations from js-sdk
* Relations is now accessible on the Room instead
* Reuse more existing code and ditch confusing `isThreadRelation`
* Fix last usage of removed `isThreadRelation`
* Update tests to match removal of isThreadRelation
* Tweak method naming to closer match spec
* Fix missing method name change
* Move spaces tests from Puppeteer to Cypress
* Add missing fixture
* Tweak synapsedocker to not double error on a docker failure
* Fix space hierarchy loading race condition
Fixes https://github.com/matrix-org/element-web-rageshakes/issues/10345
* Fix race condition when creating public space with url update code
* Try Electron once more due to perms issues around clipboard
* Try set browser permissions properly
* Try to enable clipboard another way
* Try electron again
* Try electron again again
* Switch to built-in cypress feature for file uploads
* Mock clipboard instead
* TMPDIR ftw?
* uid:gid pls
* Clipboard tests can now run on any browser due to mocking
* Test Enter as well as button for space creation
* Make the test actually work
* Update cypress/support/util.ts
Co-authored-by: Eric Eastwood <erice@element.io>
Co-authored-by: Eric Eastwood <erice@element.io>
* Remove blank header from video room view frame
* Add video room option to space context menu
* Remove duplicate tooltips from face piles
* Factor RoomInfoLine out of SpaceRoomView
* Factor RoomPreviewCard out of SpaceRoomView
* Adapt RoomPreviewCard for video rooms
* "New video room" → "Video room"
* Add comment about unused cases in RoomPreviewCard
* Make widgets in video rooms mutable again to de-risk future upgrades
* Ensure that the video channel exists when mounting VideoRoomView
* Show a lobby screen in video rooms
* Add connecting state
* Test VideoRoomView
* Test VideoLobby
* Get the local video stream with useAsyncMemo
* Clean up code review nits
* Explicitly state what !important is overriding
* Use spacing variables
* Wait for video channel messaging
* Update join button copy
* Show frame on both the lobby and widget
* Force dark theme for video lobby
* Wait for the widget to be ready
* Make VideoChannelStore constructor private
* Allow video lobby to shrink
* Add invite button to video room header
* Show connected members on lobby screen
* Make avatars in video lobby clickable
* Increase video channel store timeout
* Fix Jitsi Meet getting wedged on startup in Chrome and Safari
* Revert "Fix Jitsi Meet getting wedged on startup in Chrome and Safari"
This reverts commit 9f77b8c227c1a5bffa5d91b0c48bf3bbc44d4cec.
* Disable device buttons while connecting
* Factor RoomFacePile into a separate file
* Fix i18n lint
* Fix switching video channels while connected
* Properly limit number of connected members in face pile
* Fix CSS lint