* 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>
* Use native js-sdk group call support
Now that the js-sdk supports group calls natively, our group call implementation can be simplified a bit. Switching to the js-sdk implementation also brings the react-sdk up to date with recent MSC3401 changes, and adds support for joining calls from multiple devices. (So, the previous logic which sent to-device messages to prevent multi-device sessions is no longer necessary.)
* Fix strings
* Fix strict type errors
* Fix getRelationsForEvent tsc strictness
* Use shared type for GetRelationsForEvent
* Fix lint
* Add alternative type
* getRelationsForEvent is not required
* Relations are optional
* Reactions are optional
* We expect relations in these tests
* Add more protection if the eventID is not defined
* Allow null too
* Better test typing
* User ID is not necessary unless something is selected
* It's okay to [].includes(null)
* Null is as good as undefined here
* Null or undefined is good here
* We have some expectations for the tests
* The room and user can be undefined too
* Protec
* Reactions are optional
* Try match signatures
* Null or undefined
* More null or undefined
* Protec
* Fix typo (wrong variable)
* Remove optional params
See https://github.com/matrix-org/matrix-react-sdk/pull/9558#discussion_r1017515913
* Fix up last maaaaybe relevant lint
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* sliding sync: add lazy-loading member support
Also swap to `$ME` constants when referring to our own member event.
* Hook into existing LL logic when showing the MemberList
* Linting
* Use consts in js sdk not react sdk
* Add jest tests
* linting
* Store the room in the test
* Fix up getRoom impl
* Add MemberListStore
* Use the right context in MemberList tests
* Fix RightPanel-test
* Always return members even if we lazy load
* Add MemberListStore tests
* Additional tests
* Fix bug with message context menu
* fix bug where ThreadSummary failed if no last reply is available
* Fix relations direction API
* Use same API for threads as for any other timeline
* Determine if event belongs to thread on jumping to event
* properly listen to thread deletion
* Add thread redaction tests
* Add fetchInitialEvent tests
* Paginate using default TimelinePanel behaviour
* Remove unused threads deleted code
Co-authored-by: Germain <germain@souquet.com>
Co-authored-by: Germain <germains@element.io>
* change testid attribute for dialog buttons to rtl friendly
* add confirm dialog for signing out sessions
* cleanup commented
* update cypress tets
* clear modals before test
* missing modal in jest tests on ci only
* Support for login + E2EE set up with QR
* Whitespace
* Padding
* Refactor of fetch
* Whitespace
* CSS whitespace
* Add link to MSC3906
* Handle incorrect typing in MatrixClientPeg.get()
* Use unstable class name
* fix: use unstable class name
* Use default fetch client instead
* Update to revised function name
* Refactor device manager panel and make it work with new sessions manager
* Lint fix
* Add missing interstitials and update wording
* Linting
* i18n
* Lint
* Use sensible sdk config name for fallback server
* Improve error handling for QR code generation
* Refactor feature availability logic
* Hide device manager panel if no options available
* Put sign in with QR behind lab setting
* Reduce scope of PR to just showing code on existing device
* i18n updates
* Handle null features
* Testing for LoginWithQRSection
* Refactor to handle UIA
* Imports
* Reduce diff complexity
* Remove unnecessary change
* Remove unused styles
* Support UIA
* Tidy up
* i18n
* Remove additional unused parts of flow
* Add extra instruction when showing QR code
* Add getVersions to server mocks
* Use proper colours for theme support
* Test cases
* Lint
* Remove obsolete snapshot
* Don't override error if already set
* Remove unused var
* Update src/components/views/settings/devices/LoginWithQRSection.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update res/css/views/auth/_LoginWithQR.pcss
Co-authored-by: Kerry <kerrya@element.io>
* Use spacing variables
* Remove debug
* Style + docs
* preventDefault
* Names of tests
* Fixes for js-sdk refactor
* Update snapshots to match test names
* Refactor labs config to make deployment simpler
* i18n
* Unused imports
* Typo
* Stateless component
* Whitespace
* Use context not MatrixClientPeg
* Add missing context
* Type updates to match js-sdk
* Wrap click handlers in useCallback
* Update src/components/views/settings/DevicesPanel.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Wait for DOM update instead of timeout
* Add missing snapshot update from last commit
* Remove void keyword in favour of then() clauses
* test main paths in LoginWithQR
* test coverage for display of qr code section
* remove unused test props
Co-authored-by: Hugh Nimmo-Smith <hughns@matrix.org>
Co-authored-by: Hugh Nimmo-Smith <hughns@users.noreply.github.com>
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Support for login + E2EE set up with QR
* Whitespace
* Padding
* Refactor of fetch
* Whitespace
* CSS whitespace
* Add link to MSC3906
* Handle incorrect typing in MatrixClientPeg.get()
* Use unstable class name
* fix: use unstable class name
* Use default fetch client instead
* Update to revised function name
* Refactor device manager panel and make it work with new sessions manager
* Lint fix
* Add missing interstitials and update wording
* Linting
* i18n
* Lint
* Use sensible sdk config name for fallback server
* Improve error handling for QR code generation
* Refactor feature availability logic
* Hide device manager panel if no options available
* Put sign in with QR behind lab setting
* Reduce scope of PR to just showing code on existing device
* i18n updates
* Handle null features
* Testing for LoginWithQRSection
* Refactor to handle UIA
* Imports
* Reduce diff complexity
* Remove unnecessary change
* Remove unused styles
* Support UIA
* Tidy up
* i18n
* Remove additional unused parts of flow
* Add extra instruction when showing QR code
* Add getVersions to server mocks
* Use proper colours for theme support
* Test cases
* Lint
* Remove obsolete snapshot
* Don't override error if already set
* Remove unused var
* Update src/components/views/settings/devices/LoginWithQRSection.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update res/css/views/auth/_LoginWithQR.pcss
Co-authored-by: Kerry <kerrya@element.io>
* Use spacing variables
* Remove debug
* Style + docs
* preventDefault
* Names of tests
* Fixes for js-sdk refactor
* Update snapshots to match test names
* Refactor labs config to make deployment simpler
* i18n
* Unused imports
* Typo
* Stateless component
* Whitespace
* Use context not MatrixClientPeg
* Add missing context
* Type updates to match js-sdk
* Wrap click handlers in useCallback
* Update src/components/views/settings/DevicesPanel.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Wait for DOM update instead of timeout
* Add missing snapshot update from last commit
* Remove void keyword in favour of then() clauses
* test main paths in LoginWithQR
Co-authored-by: Travis Ralston <travisr@matrix.org>
Co-authored-by: Kerry <kerrya@element.io>
* 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>
* silence call ringers when local notifications are silenced
* more coverage for silencing
* explain disabled silence button
* lint
* increase wait for modal
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* add destructive option and close on interaction options
* add kebab context menu wrapper
* use kebab context menu in current device section
* use named export
* lint
* sessionman tests
* promote new session manager to beta
* hide old sessions section when new dm enabled
* use correct logic
* add new ViewUserDeviceSettings action
* replace device management ctas with viewUserDeviceSettings
* test SecurityUserSettingsTab
* more complete mocks
* more thorough mocks
* more mocks
* test LabsUserSettingsTab
* lint
* updated copy
* update snaps for new copy
* record device client inforamtion events on app start
* matrix-client-information -> matrix_client_information
* fix types
* remove another unused export
* add docs link
* display device client information in device details
* update snapshots
* integration-ish test client information in metadata
* tests
* fix tests
* export helper
* DeviceClientInformation type
* Device manager - select all devices (#9330)
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* rename type
* use ExtendedDevice type everywhere
* rename clientName to appName for less collision with UA parser
* fix bad find and replace
* rename ExtendedDeviceInfo to ExtendedDeviceAppInfo
* rename DeviceType comp to DeviceTypeIcon
* update tests for new required property deviceType
* add stubbed user agent parsing
* setup test cases
* detect device type correctly
* 80% working ua parser
* parse asera gents for device info
* combine clientName/Version into one field, remove debug from tests
* add new metadata to device details
* render device info from UA
* 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
* record device client inforamtion events on app start
* matrix-client-information -> matrix_client_information
* fix types
* remove another unused export
* add docs link
* display device client information in device details
* update snapshots
* integration-ish test client information in metadata
* tests
* fix tests
* export helper
* DeviceClientInformation type
* Device manager - select all devices (#9330)
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* rename type
* use ExtendedDevice type everywhere
* rename clientName to appName for less collision with UA parser
* fix bad find and replace
* rename ExtendedDeviceInfo to ExtendedDeviceAppInfo
* rename DeviceType comp to DeviceTypeIcon
* update tests for new required property deviceType
* add stubbed user agent parsing
* add icons
* set device type icon
* device type icon tets
* update snapshots for device type icon changes
* desktop icon viewbox
* i18n
* record device client inforamtion events on app start
* matrix-client-information -> matrix_client_information
* fix types
* remove another unused export
* add docs link
* display device client information in device details
* update snapshots
* integration-ish test client information in metadata
* tests
* fix tests
* export helper
* DeviceClientInformation type
* Device manager - select all devices (#9330)
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* rename type
* use ExtendedDevice type everywhere
* rename clientName to appName for less collision with UA parser
* fix bad find and replace
* rename ExtendedDeviceInfo to ExtendedDeviceAppInfo
* rename DeviceType comp to DeviceTypeIcon
* update tests for new required property deviceType
* add stubbed user agent parsing
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* Fix device selection in pre-join screen for Element Call video rooms
As per https://github.com/vector-im/element-call/pull/609
* Update unit test
* Lint
* Hold a media stream while we enumerate device so we can do so reliably.
This means we can remove the device fallback labels.
* i18n
* Remove unnecessary useState
* Fix fetching video devices when video muted
* Actually fix preview stream code
* Fix unit test now fallback is no longer a thing
* Test changing devices
* 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
* 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
* Add Voice Broadcast labs setting and composer button
* Implement strict typing
* Extend MessageComposer-test
* Extend tests
* Revert some strict type fixex
* Convert FEATURES to enum; change case
* Use fake timers in MessageComposer-test
* add sign out of current device section in device details
* lint
* add sign out cta for other sessions
* test other device sign out
* add pending sign out loader
* tidy
* fix strict error
* use gap instead of nbsp
* use more specific assertions in tests, tweak formatting
* tweak test
* trigger verification of other devices
* add sign out of current device section in device details
* fix classname
* lint
* strict type fix
* fix test
* improve mocked VerifReq
* scroll to filtered list from security recommendations
* test sessionmanager scroll to
* stable snapshot
* fix strict errors
* prtidy
* dont show security rec section when only curent session is unverified
* scroll to filtered list from security recommendations
* test sessionmanager scroll to
* stable snapshot
* fix strict errors
* prtidy
* use smooth scrolling
* 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
* Fix useSmoothAnimation enablement not working properly by getting rid of it
Passing duration=0 is more logical and less superfluous
* Refactor UploadBar to handle state more correctly
* Change ProgressBar to new useSmoothAnimation signature and default animated to true for consistency
* Add type guard
* Make types stricter
* Write tests for the ProgressBar component
* Make the new test conform to tsc --strict
* Update UploadBar.tsx
* Update UploadBar.tsx
* Update UploadBar.tsx
* Switch tooltips to use React Portals
* Remove redundant React key to simplify reconciliation
* Fix cleanup and it.each test
* Update snapshots due to style order difference
* add expandable device details to session list
* test device expansion in filtered list
* test expanded device id management from sessionmanager tab
* i18n
* update snapshot
* update snapshots
* use css instead of br
* add device filtering
* improve dropdown styling
* test device filtering
* update type imports
* fix types
* security card margin
* more specific type for onFilterOptionChange
* split current device section into component
* add dropdown button for currentsession device details
* test currentdevicesection
* remove unnecc beforeEach
* update type imports
* i18n and lint
* add security card and style
* deprecate warning and verified svgs that use hard coded color
* style icons, test
* i18n
* stylelint
* redo lost lint fixes
* fix svg ref
* actually fix svg
* fix stupid copy pasting
* use rgba for e2e light variations
* add security card and style
* deprecate warning and verified svgs that use hard coded color
* style icons, test
* i18n
* stylelint
* fix svg ref
* actually fix svg
* fix stupid copy pasting
* use rgba for e2e light variations
* use device security card in current session section
* lint
* update snapshot test after dev merge
* add session manager tab to user settings
* fussy import ordering
* i18n
* basic sorted list outline
* rename to filtered device list
* exclude current device session from other sessions list
* test other sessions section
* extract deletedevices logic into util fn
* unit test deleteDevices
* test devicespanel device deletion
* remove debug logs
* i18n
* assert more on deleteMultipleDevices calls
* add session manager tab to user settings
* fussy import ordering
* i18n
* extract device fetching logic into hook
* use new extended device type in device tile, add verified metadata
* add current session section, test
* tidy
* update types for DeviceWithVerification
* Move pin drop out of labs (PSG-664)
Signed-off-by: Johannes Marbach <johannesm@element.io>
* Regenerate strings
Signed-off-by: Johannes Marbach <johannesm@element.io>
* redesign device tile info
* test DeviceTile except for broken date mocking
* mock dates the nice way, test lastactivity in device tile
* tweak spacing style
* update comment style in rethemendex
* i18n
* Remove Add Space button in RoomListHeader when user cannot createSpaces
* Reuse the same booleans as SpaceContextMenu
* Code review fixes
* Fix test for standard case
* Refactor tests and add more
* Test the PlusMenu, where the bug originally was
* Add tests for plus menu
* Refactor tests
* add type in functions and use DMRoomMap#setShared
* use of wrapInMatrixClientContext
* Trigger CI
* Ignore enzyme deprecation in RoomListHeader-test.tsx
Co-authored-by: Estelle Comment <estelle.comment@gmail.com>
Co-authored-by: mcalinghee <mcalinghee.dev@gmail.com>
Co-authored-by: Michael Weimann <michaelw@matrix.org>
* Spike AXE A11Y testing in Cypress
* Fix NewRoomIntro breaking html/aria list rules
* Fix HeaderButtons breaking aria role semantics rules
* missing type
* Switch left panel from aside to nav and include space panel
* Give the page a main heading of the room name when viewing a room
* Use header landmark on RoomHeader
* Improve aria attributes on composer when autocomplete is closed
* Fix aria-owns on RoomHeader
* Give Spinner an aria role
* Give server picker help button an aria label
* Improve auth aria attributes and semantics
* Improve heading semantics in use case selection screen
* Fix autocomplete attribute to be valid
* Fix heading semantics on login page
* Improve Cypress axe testing
* Add axe tests
* Stop synapse after the timeline tests
* Await spinners to fade before percy snapshotting timeline tests
* Improve naming of plugin
* Update snapshots
* Fix accidental heading change
* Fix double synapse stoppage
* Fix Cypress timeline avatar assertions to be DPI agnostic
* Fix aria attributes on date separators
* delint
* Update snapshots
* Revert style change
* Skip redundant call
* extract preventDefaultWrapper into utils
* add click handling to beacon list item
* add click handling to dialog sidebar
* focus in on beacons when clicked in list
* stylelint
* fussy import ordering
* test beacon focusing in beaocnviewdialog
* live location without map POC
* styles
* force map tiles to show no map for test build
* check latestlocationstate exists
* just use loading style map fallback when cant display map
* style map error for tile view
* set pointer cursor when map error is clickable
* test mbeaconbody with map display error, lint
* lint more good
* remove changes for first attempt tile
* make maperror test id more accurate
* fussy import ordering
* PR tweaks
* add role=presentation to backdrop panle image
* replace img icons with svg components in InviteDialog
* replace img icon with svg component
* img icons to svg icons in MImageBody
* remove log
* img icon to svg in SecurityRoomSettingsTab
* use shared error message for media message tiles
* remove nbsp
* dont snapshot test entire rtl render response
* use aria-describedby for uploadconfirm preview
* use aria-labelledby instead
* move getForwardableBeacon to beacon utils
* move event transform type up
* add helper to get shareable-as-locaion events
* use getShareableLocationEvent in MessageContextMenu
* test opening in maplink
* fix bad copy pasted tests
* redact beacon locations on redaction
* redact beacon locations on beacon info redaction
* fussy import ordering
* use real fake redaction in beaconbody test
* Revert "Prevent new composer from overflowing from non-breakable text (#8829)"
This reverts commit 57dff8131c.
* Revert "Fix scroll jump issue with the composer (#8791)"
This reverts commit 5167521ea4.
* Revert "Fix scroll jump issue with the composer (#8788)"
This reverts commit f568a76dc6.
* Revert "Revert link color change in composer (#8784)"
This reverts commit aedbeb2995.
* Revert "Improve composer visiblity (#8578)"
This reverts commit f14374a51c.
* handle beacon location events in ForwardDialog
* add transformer for forwarded events in MessageContextMenu
* remove canForward
* update snapshots for beacon model change
* add comments
* fix bad copy pasted test
* add test for beacon locations
* Implement searching for public rooms and users in new search experience
* Implement loading indicator for spotlight results
* Moved spotlight dialog into own subfolder
* Extract search result avatar into separate component
* Build generic new dropdown menu component
* Build new network menu based on new network dropdown component
* Switch roomdirectory to use new network dropdown
* Replace old networkdropdown with new networkdropdown
* Added component for public room result details
* Extract hooks and subcomponents from SpotlightDialog
* Create new hook to get profile info based for an mxid
* Add hook to automatically re-request search results
* Add hook to prevent out-of-order search results
* Extract member sort algorithm from InviteDialog
* Keep sorting for non-room results stable
* Sort people suggestions using sort algorithm from InviteDialog
* Add copy/copied tooltip for invite link option in spotlight
* Clamp length of topic for public room results
* Add unit test for useDebouncedSearch
* Add unit test for useProfileInfo
* Create cypress test cases for spotlight dialog
* Add test for useLatestResult to prevent out-of-order results
* Crude way of layering the waveform and seek bar
Not intended for production.
* Use a layout prop instead of something less descriptive
* Fix alignment properly, and play with styles
* Convert back to a ball
* Use `transparent` which makes NVDA happy enough
* Allow keyboards in the seek bar
* Try to make the clock behave more correctly with screen readers
MIDNIGHT
* Remove legacy export
* Remove redundant attr
* Appease the linter
* 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
* navigate to live location tile from left panel live warning
Signed-off-by: Kerry Archibald <kerrya@element.io>
* navigate to beacon tile from room live share warning
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add cursor
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Improve widet buttons behaviour and layout
Relates to vector-im/element-web#20506
See PSC-79
Signed-off-by: Michael Weimann <michaelw@matrix.org>
* Add AppTile tests
* test most basic paths in messageactionbar
Signed-off-by: Kerry Archibald <kerrya@element.io>
* tidy
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use rtl for MessageActionBar test
Signed-off-by: Kerry Archibald <kerrya@element.io>
* make beacon_info events semi actionable
Signed-off-by: Kerry Archibald <kerrya@element.io>
* remove log
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test thread exception for beacon
Signed-off-by: Kerry Archibald <kerrya@element.io>
* eat click events in beacon status to stop jumping from reply tile
Signed-off-by: Kerry Archibald <kerrya@element.io>
* set max width on beaconbody for render in thread panel
* Add an option to ignore (block) a user when reporting their events
This is primarily useful if the content being reported really doesn't belong on your screen, and the room moderators are slow to react.
Ideally we'd use the word "block" instead of "ignore", but we call it "ignore user" everywhere else. See https://github.com/vector-im/element-web/issues/19590 for further context on the word choice.
This change includes a minor refactor to the styles of labelled toggles (for reusability).
* Appease the linter
* Use a checkbox instead of toggle in the dialog
* Update classnames handling for toggle switch
* Appease the linter
* Go to space landing page when clicking on a selected space
Signed-off-by: Robin Townsend <robin@robin.town>
* Go to home landing page when clicking on selected home space
Signed-off-by: Robin Townsend <robin@robin.town>
* Remove metaspace behavior
* Add tests
* Use the dispatcher action enum
* Break up the onClick assignment
* Remove duplicate mx_Dialog_buttons
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
* Group buttons on mx_Dialog with span
- Cancel default styling for elements inside .mx_AccessSecretStorageDialog_primaryContainer
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
* Move common rules of mx_Dialog_buttons_row to _common.scss
- Set 16px gap between buttons per https://github.com/vector-im/element-web/issues/19426#issuecomment-949778515
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
* Spacing variables
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
* Nesting - .mx_AccessSecretStorageDialog_reset
- Fix the reset link color
- Set $spacingStart variable
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
* Remove unnecessary rule
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
* Don't linkify code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Put the linkify ignoreTags option in the right place
Signed-off-by: Robin Townsend <robin@robin.town>
* Add code to list of ignored linkification tags as well
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that code blocks skip linkification
Signed-off-by: Robin Townsend <robin@robin.town>
* Move test to the right spot
Signed-off-by: Robin Townsend <robin@robin.town>
* Use a snapshot instead for test
Signed-off-by: Robin Townsend <robin@robin.town>
* add state for waiting for labs flag
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add enable live share component
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test enabling live share labs flag
Signed-off-by: Kerry Archibald <kerrya@element.io>
Pinning or unpinning a persistent widget, such as Jitsi, could cause the
PiP view and the app drawer to fight for control over the widget, since
the PiP view never realized that it was supposed to relinquish control.
This was due to a race between the WidgetLayoutStore update and the
AppTile lifecycle tracking update.
* add maxzoom to map fit bounds
Signed-off-by: Kerry Archibald <kerrya@element.io>
* take snapshot of bounds at center on dialog open
Signed-off-by: Kerry Archibald <kerrya@element.io>
* 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
* open a dialog with map centered around first beacon
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add room member markers
Signed-off-by: Kerry Archibald <kerrya@element.io>
* fix unmount issue in smart marker
Signed-off-by: Kerry Archibald <kerrya@element.io>
* dont throw on no more live locations
Signed-off-by: Kerry Archibald <kerrya@element.io>
* cursor on beacon maps
Signed-off-by: Kerry Archibald <kerrya@element.io>
* fussy import ordering
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test dialog opening from beacon body
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test beaconmarker
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test BeaconViewDialog
Signed-off-by: Kerry Archibald <kerrya@element.io>
* comment
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use unstable prefix for wk tile_Server
Signed-off-by: Kerry Archibald <kerrya@element.io>
* unstable prefix for new m.tile_server use in test
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Remove radio component
* "Voice room" → "video room"
* Remove interactivity from video room tiles
* Update connection state when joining via widget
* Simplify room header buttons for video rooms
* Split out video room creation into a separate menu option
* Simplify room options for video rooms
* Update video room tile layout
* Tell the Jitsi widget whether it's a video channel
* Update tests
* "Voice" → "video" in more places
* Fix tests
* Re-add frame to immersive Jitsi widgets
* Comment ack
* Make updateDevices more readable
* Type FacePile
* expose wire errors in more useful way
* add wire error state to room live share warning bar
Signed-off-by: Kerry Archibald <kerrya@element.io>
* stylelint
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add types to getLabel helper
Signed-off-by: Kerry Archibald <kerrya@element.io>
* display live share warning only when geolocation is happening
Signed-off-by: Kerry Archibald <kerrya@element.io>
* kill beacons when geolocation is unavailable or permissions denied
Signed-off-by: Kerry Archibald <kerrya@element.io>
* polish and comments
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Add utility for getting connected voice participants
* Allow voice room members to send connected device state
* Update connected devices when connecting/disconnecting voice
* Show voice room participants in room tile when not connected
* Update voice room tests
* Add null types and guards
* Remove deprecated feature_communities_v2_prototypes
* Update _components
* i18n
* delint
* Cut out a bit more dead code
* Carve into legacy components
* Carve into mostly the room list code
* Carve into instances of "groupId"
* Carve out more of what comes up with "groups"
* Carve out some settings
* ignore related groups state
* Remove instances of spacesEnabled
* Fix some obvious issues
* Remove now-unused css
* Fix variable naming for legacy components
* Update i18n
* Misc cleanup from manual review
* Update snapshot for changed flag
* Appease linters
* rethemedex
* Remove now-unused AddressPickerDialog
* Make ConfirmUserActionDialog's member a required prop
* Remove useless override from RightPanelStore
* Remove extraneous CSS
* Update i18n
* Demo: "Communities are now Spaces" landing page
* Restore linkify for group IDs
* Demo: Dialog on click for communities->spaces notice
* i18n for demos
* i18n post-merge
* Update copy
* Appease the linter
* Post-merge cleanup
* Re-add spaces_learn_more_url to the new SdkConfig place
* Round 1 of post-merge fixes
* i18n
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Add voice room labs flag
Signed-off-by: Robin Townsend <robin@robin.town>
* Add more widget actions for interacting with Jitsi
Signed-off-by: Robin Townsend <robin@robin.town>
* Factor out a more generic Jitsi creation utility
Signed-off-by: Robin Townsend <robin@robin.town>
* Add utilities for managing voice channels
Signed-off-by: Robin Townsend <robin@robin.town>
* Enable creation of voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Force a maximized view of voice channel widgets
Signed-off-by: Robin Townsend <robin@robin.town>
* Add voice channel store
Signed-off-by: Robin Townsend <robin@robin.town>
* Factor out a more generic FacePile
Signed-off-by: Robin Townsend <robin@robin.town>
* Implement room tile changes for voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Add interactive radio component to the left panel
Signed-off-by: Robin Townsend <robin@robin.town>
* Test voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Update name of call room type
Signed-off-by: Robin Townsend <robin@robin.town>
* Clarify that voice rooms are under development
Signed-off-by: Robin Townsend <robin@robin.town>
* Use readonly
Signed-off-by: Robin Townsend <robin@robin.town>
* Move acks to the end of handlers
Signed-off-by: Robin Townsend <robin@robin.town>
* Add comment about avatar URLs coming from Jitsi
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't use unicode ellipses
for translation reasons?
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix tests
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix tests, again
Signed-off-by: Robin Townsend <robin@robin.town>
* Remove unnecessary export
Signed-off-by: Robin Townsend <robin@robin.town>
* Ack Jitsi events when we wait for them
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix emoting with emoji or pills
* Fix some slash command errors not being shown
* Re-enable mistakenly skipped SendMessageComposer tests
* Test emoting with non-text parts
* Don't assume that widget IDs are unique
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't remove live tiles that don't exist
Signed-off-by: Robin Townsend <robin@robin.town>
* Add unit test for AppTile's live tile tracking
Signed-off-by: Robin Townsend <robin@robin.town>
* Paginate responses to pinned polls
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pinned polls display paginated responses
Signed-off-by: Robin Townsend <robin@robin.town>
* Test basic pinned message functionality
Signed-off-by: Robin Townsend <robin@robin.town>
* Test pinned polls
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix test
Signed-off-by: Robin Townsend <robin@robin.town>
* Add unexposed account setting for hiding poll creation
This is to match the sticker picker setting we already have, but not exposed in the user settings until we decide if we actually want it to be there.
This is primarily intended to be used in environments that disable it at the config level, though given there's multiple people in the wild who have asked for this, it seems reasonable to expose it as a hidden setting instead. Note that as of writing it's not clear if any of those requests made it as far as an issue tracker.
Typically for the usecase presented we'd add a new UIFeature flag, however this *feels* wrong for the case at hand.
* Move visibility check way higher
* Fix i18n post-merge
* Hide unpinnable pinned messages in more cases
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix typo
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that unpinnable pinned messages get hidden
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix cli.relations error in test
Signed-off-by: Robin Townsend <robin@robin.town>
* Use event: true shortcut when calling mkEvent
Signed-off-by: Robin Townsend <robin@robin.town>
* Use mockResolvedValue instead of mockReturnValue for async mock
Signed-off-by: Robin Townsend <robin@robin.town>
* Actually mock redacted messages correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Ensure that panel is updated before assertions are made
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pinned messages reflect edits correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix warning about missing date
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix lint
Signed-off-by: Robin Townsend <robin@robin.town>
* Hide unpinnable pinned messages in more cases
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix typo
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that unpinnable pinned messages get hidden
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix cli.relations error in test
Signed-off-by: Robin Townsend <robin@robin.town>
* Use event: true shortcut when calling mkEvent
Signed-off-by: Robin Townsend <robin@robin.town>
* Use mockResolvedValue instead of mockReturnValue for async mock
Signed-off-by: Robin Townsend <robin@robin.town>
* Actually mock redacted messages correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Ensure that panel is updated before assertions are made
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
Fix https://github.com/vector-im/element-web/issues/21262
Optimizations:
1. Don't update the `style` (positioning) of hidden tooltips
1. Don't add DOM elements to the page for hidden tooltips
> ## Performance problems broken down
>
>
> ### Hidden tooltips rendering on `scroll`
>
> You can see that the Tooltip render is attached to the `scroll` event at [`src/components/views/elements/Tooltip.tsx#L78-L81`](31f0a37ca2/src/components/views/elements/Tooltip.tsx (L78-L81))
>
> The rendering calls [`src/components/views/elements/Tooltip.tsx#L101` -> `updatePosition`](36adba101c/src/components/views/elements/Tooltip.tsx (L101)) which ends up as an expensive "Recalculate Style" because it uses [`Element.getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). This happens many many times within a single `scroll` event. Probably once for each tooltip within the room list **even though no tooltips are event visible as I scroll**. I can see that we're just updating the `style` attribute for a bunch of `.mx_Tooltip_invisible` elements at the end of the document.
>
> Each one of the purple spans below the `scroll` span ends up as a call to `updatePosition`. And a `scroll` event takes 35ms to 60ms to complete which is way over the 16.6ms 60 FPS budget (on a powerful desktop PC), granted these times are with the performance profiling running. This is without the Passbolt extension explained below.
>
> And the room list contains about 141 rooms (`document.querySelectorAll('.mx_RoomTile').length`):
>
> ![](https://user-images.githubusercontent.com/558581/156273551-e744d3d6-93c6-4b07-bb12-6aad361f96a2.png)
>
>
>
> ### Passbolt Chrome browser extension exacerbates the problem
>
> In order to login to Passbolt, it requires a browser extension which defaults to mucking up all pages:
>
> <img src="https://user-images.githubusercontent.com/558581/156275644-bc26b1f5-5d99-4eae-b74b-c2028f2f1baf.png" width="300">
>
>
> The extension source seems to be available: https://github.com/passbolt/passbolt_browser_extension
>
> The Passbolt Chrome extension has a `MutationObserver` listening to all attribute and element changes to the whole `<body>` of the `document` so it can `findAndSetAuthenticationFields` (find form elements and autofill).
>
>
> [`passbolt/passbolt_styleguide` -> `src/react-web-integration/lib/InForm/InFormManager.js#L143`](1c5eddc910/src/react-web-integration/lib/InForm/InFormManager.js (L143))
> ```js
> this.mutationObserver.observe(document.body, { attributes: true, childList: true, subtree: true });
> ```
>
> This causes a bunch of `Forced reflow` because the Tooltip `updatePosition` is mutating the element `style` attribute and Passbolt `MutationObserver` callbacks are querying the whole DOM looking for form elements all in the same frame.
>
> Under the `scroll` event, all of the little spans are the `MutationObserver` -> `findAndSetAuthenticationFields`. With the Passbolt extension, scrolling is verrrrry crunchy and bad.
>
> ![](https://user-images.githubusercontent.com/558581/156144998-8cf7686f-3c7b-42f8-8d81-ff780bae0ab5.png)
>
>
> #### Workaround
>
> Instead of running Passbolt on all sites, we can enable the extension to only run on the domain for Passbolt instance itself. I'm guessing the Passbolt extension also does autofill stuff on sites but I always login manually to the Passbolt instance so this solution works for me �
>
> **Extensions** -> **Passbolt** -> **Details** -> Change **Site access** to `On specific sites` -> Enter in your Passbolt instance `https://passbolt.example.com/`
>
> ![](https://user-images.githubusercontent.com/558581/156275630-a53ef6a1-c058-4ac9-aa08-ae50b90e72c9.png)
>
> *-- https://github.com/vector-im/element-web/issues/21262*
* Fix edge case in context menu chevron positioning
Signed-off-by: Robin Townsend <robin@robin.town>
* Expand context menu positioning regression tests
Signed-off-by: Robin Townsend <robin@robin.town>
* Try harder to keep context menus inside the window
Signed-off-by: Robin Townsend <robin@robin.town>
* Use UIStore for window dimensions
Signed-off-by: Robin Townsend <robin@robin.town>
* Test ContextMenu positioning
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't pillify code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pills do not appear in code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Use snapshot instead for test
Signed-off-by: Robin Townsend <robin@robin.town>
* react-focus-lock to 2.5.1
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use enzyme in ASSD test so focus lock finds active element
Signed-off-by: Kerry Archibald <kerrya@element.io>
* findById and flushPromises to test utils
Signed-off-by: Kerry Archibald <kerrya@element.io>
* unit test main paths in UserInfo component
Signed-off-by: Kerry Archibald <kerrya@element.io>
* one more test case
Signed-off-by: Kerry Archibald <kerrya@element.io>
* remove BasicUserInfo export
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Render a CollapsibleButton's children (needed by UploadButton)
* Make UploadButton ready to live inside an overflow menu
* Always show overflow menu in composer: main buttons are emoji and attach
* Re-order composer buttons as per design
* Re-word composer button captions to be simple nouns
* Don't rotate More options button when clicked
* Move the composer menu and dialogs 16px in from right
* Reduce shadow on composer More menu
* From review: remove else clause
* From review: take input out of button
* Update test snapshots
* Update snapshots