-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Add SubscriptionViewModel base class #30297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Turn the trivial TextualEvent into a shared component with a separate view model for element web. Args to view model will probably change to be more specific and VM typer needs abstracting out into an interface, but should give the general idea.
Because we used it anyway, we just cheated by getting it from the context
cherry pick edc5e87 from florianduros/storybook
for React 19 compat
There's no reason to use the react-webpack plugin just because our app is stuck on webpack, it just means we have vite as a dependency too.
Not necessary now we're using vite
| private removeSubscription = (): void => { | ||
| this.eventTileProps.mxEvent.off(MatrixEventEvent.SentinelUpdated, this.onEventSentinelUpdated); | ||
| protected addDownstreamSubscription = (): void => { | ||
| this.eventTileProps.mxEvent.on(MatrixEventEvent.SentinelUpdated, this.subs.emit); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
emit called in this way will have no this reference as it is not an arrow-function or bound
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point: I've made emit an arrow function and added a test to asset it actually works.
so it can be passed directly as a callback
Changes in [1.11.110](https://github.com/element-hq/element-web/releases/tag/v1.11.110) (2025-08-27) ==================================================================================================== * Hide recovery key when re-entering it while creating or changing it ([#30499](element-hq/element-web#30499)). Contributed by @andybalaam. * Add `?no_universal_links=true` to OIDC url so EX doesn't try to handle it ([#29439](element-hq/element-web#29439)). Contributed by @t3chguy. * Show a blue lock for unencrypted rooms and hide the grey shield for encrypted rooms ([#30440](element-hq/element-web#30440)). Contributed by @langleyd. * Add support for Module API 1.4 ([#30185](element-hq/element-web#30185)). Contributed by @t3chguy. * MVVM - Introduce some helpers for snapshot management ([#30398](element-hq/element-web#30398)). Contributed by @MidhunSureshR. * A11y: move focus to right panel when opened ([#30553](element-hq/element-web#30553)). Contributed by @florianduros. * Fix e2e warning icon should be white ([#30539](element-hq/element-web#30539)). Contributed by @florianduros. * Remove NoOneHere disabled reason. ([#30524](element-hq/element-web#30524)). Contributed by @toger5. * Fix downloading files with authenticated media API ([#30520](element-hq/element-web#30520)). Contributed by @t3chguy. * Fix call permissions check confusion around element call ([#30521](element-hq/element-web#30521)). Contributed by @t3chguy. * Fix line wrap around emoji verification ([#30523](element-hq/element-web#30523)). Contributed by @t3chguy. * Don't highlight redacted events ([#30519](element-hq/element-web#30519)). Contributed by @t3chguy. * Fix matrix.to links not being handled in the app ([#30522](element-hq/element-web#30522)). Contributed by @t3chguy. * Fix issue of new room list taking up the full width ([#30459](element-hq/element-web#30459)). Contributed by @langleyd. * Fix widget persistence in React development mode ([#30509](element-hq/element-web#30509)). Contributed by @robintown. * Fix widget initialization in React development mode ([#30463](element-hq/element-web#30463)). Contributed by @robintown. Changes in [1.11.109](https://github.com/element-hq/element-web/releases/tag/v1.11.109) (2025-08-11) ==================================================================================================== This release supports the upcoming v12 ("hydra") Matrix room version and is necessary to view and participate in these rooms. * [Backport staging] Allow /upgraderoom command without developer mode enabled ([#30529](element-hq/element-web#30529)). Contributed by @RiotRobot. * [Backport staging] Support for creator/owner power level ([#30526](element-hq/element-web#30526)). Contributed by @RiotRobot. * New room list: change icon and label of menu item for to start a DM ([#30470](element-hq/element-web#30470)). Contributed by @florianduros. * Implement the member list with virtuoso ([#29869](element-hq/element-web#29869)). Contributed by @langleyd. * Add labs option for history sharing on invite ([#30313](element-hq/element-web#30313)). Contributed by @richvdh. * Bump wysiwyg to 2.39.0 adding support for pasting rich text content in the Rich Text Edtior ([#30421](element-hq/element-web#30421)). Contributed by @langleyd. * Support `EventShieldReason.MISMATCHED_SENDER` ([#30403](element-hq/element-web#30403)). Contributed by @richvdh. * Change unencrypted and public pills to blue ([#30399](element-hq/element-web#30399)). Contributed by @florianduros. * Change color of public room icon ([#30390](element-hq/element-web#30390)). Contributed by @florianduros. * Script for updating storybook screenshots ([#30340](element-hq/element-web#30340)). Contributed by @dbkr. * Add toggle to hide empty state in devtools ([#30352](element-hq/element-web#30352)). Contributed by @toger5. * [Backport staging] Use userId to filter users in non-federated rooms when showing the InviteDialog ([#30537](element-hq/element-web#30537)). Contributed by @RiotRobot. * [Backport staging] Catch error when encountering invalid m.room.pinned\_events event ([#30536](element-hq/element-web#30536)). Contributed by @RiotRobot. * Update for compatibility with v12 rooms ([#30452](element-hq/element-web#30452)). Contributed by @dbkr. * New room list: fix tooltip on presence ([#30474](element-hq/element-web#30474)). Contributed by @florianduros. * New room list: add tooltip for presence and room status ([#30472](element-hq/element-web#30472)). Contributed by @florianduros. * Fix: Clicking on an item in the member list causes it to scroll to the top rather than show the profile view ([#30455](element-hq/element-web#30455)). Contributed by @langleyd. * Put the 'decrypting' tooltip back ([#30446](element-hq/element-web#30446)). Contributed by @dbkr. * Use server name explicitly for via. ([#30362](element-hq/element-web#30362)). Contributed by @Half-Shot. * fix: replace hardcoded string in poll history dialog ([#30402](element-hq/element-web#30402)). Contributed by @florianduros. * fix: replace hardcoded string on qr code back button ([#30401](element-hq/element-web#30401)). Contributed by @florianduros. * Fix color of icon button with outline ([#30361](element-hq/element-web#30361)). Contributed by @florianduros. Changes in [1.11.108](https://github.com/element-hq/element-web/releases/tag/v1.11.108) (2025-07-30) ==================================================================================================== * [Backport staging] Fix downloaded attachments not being decrypted ([#30434](element-hq/element-web#30434)). Contributed by @RiotRobot. Changes in [1.11.107](https://github.com/element-hq/element-web/releases/tag/v1.11.107) (2025-07-29) ==================================================================================================== * Message preview should show tooltip with the full message on hover ([#30265](element-hq/element-web#30265)). Contributed by @MidhunSureshR. * Support rendering notification badges on platforms that do their own icon overlays ([#30315](element-hq/element-web#30315)). Contributed by @Half-Shot. * Add SubscriptionViewModel base class ([#30297](element-hq/element-web#30297)). Contributed by @dbkr. * Enhancement: Save image on CTRL+S ([#30330](element-hq/element-web#30330)). Contributed by @ioalexander. * Add quote functionality to MessageContextMenu (#29893) ([#30323](element-hq/element-web#30323)). Contributed by @AlirezaMrtz. * Initial structure for shared component views ([#30216](element-hq/element-web#30216)). Contributed by @dbkr. * [Backport staging] Fix e2e shield being invisible in white mode for encrypted room ([#30411](element-hq/element-web#30411)). Contributed by @RiotRobot. * Force ED titlebar color for new room list ([#30332](element-hq/element-web#30332)). Contributed by @florianduros. * Add a background color to left panel for macos titlebar in element desktop ([#30328](element-hq/element-web#30328)). Contributed by @florianduros. * Fix: Prevent page refresh on Enter key in right panel member search ([#30312](element-hq/element-web#30312)). Contributed by @AlirezaMrtz.
* Very first pass at shared component views Turn the trivial TextualEvent into a shared component with a separate view model for element web. Args to view model will probably change to be more specific and VM typer needs abstracting out into an interface, but should give the general idea. * Remove old TextualEvent * Pass showHiddenEvents Because we used it anyway, we just cheated by getting it from the context * Factor out common view model stuff * Move ViewModel interface into the shared components * Add tiny wrapper hook * Move showHiddenEvents into props fully * Fill in stories / test * chore: setup storybook cherry pick edc5e87 from florianduros/storybook * Add TextualEvent component to storybook * Add mock view model & snapshot * Remove old style stories entry * Change import * Change import * Prettier * Add paxckage patch to @types/mdx for React 19 compat * Pass getSnapshot as getServerSnapshot too * Maybe make sonar regognise tests as tests * Typo * Use storybook reacvt-vite There's no reason to use the react-webpack plugin just because our app is stuck on webpack, it just means we have vite as a dependency too. * Change here too * Workaround for incomatible types in rollup rollup/rollup#5199 * Remove webpack styling addon Not necessary now we're using vite * Hopefully do screenshot testing... * need newer node * quote issues * Make it an npm script * colons * use right port * Install playwright browsers * Try without the if * Oh right, we need the headless shell * Pass flag to store received screenshots and upload diffs too * Update snapshot from received * Include platform in snapshot / received dir because font rendering differs between platforms * Suffix snapshots with platform instead like we do for playwright * Remove unnecessary env vars and better name * Add some comments * Prettier * Fix yarn.lock * Memoise vm creation Co-authored-by: Florian Duros <[email protected]> * Add implements Co-authored-by: Florian Duros <[email protected]> * Fix listener interface * Add implements Co-authored-by: Florian Duros <[email protected]> * Fix types * Fix more types * Add a superclass that simple view models can extend to reduce boilerplate * Revert useMemo as this isn't a hook * Unused import * Actually commit the file the branch is named after * Add missing playwright step * Add return type annotation * Change to add / remove subscription callback * Change to 'add' rather than 'subs.subscribe' * Add cache specifier for only shell playwright browsers * Add copyright headers * Better comment wording * Make amit an arrow function so it can be passed directly as a callback * Add a test --------- Co-authored-by: Florian Duros <[email protected]> Co-authored-by: Florian Duros <[email protected]>
That simple view models can extend in a subclass-to-get-functionality way to reduce boilerplate
Checklist
public/exportedsymbols have accurate TSDoc documentation.