MVVM - Introduce some helpers for snapshot management (#30398)

* Introduce snapshot class to track snapshot updates

This avoids the hassle of having to manually call emit.

* Better viewmodel ergonomics

- Rename `SubscriptionViewModel` to `BaseViewModel`. I feel this is
  appropriate since that class does more than just manage subscriptions.
- `getSnapshot` is no longer an abstract method. It's simply a method
  that returns the current snapshot state. This ensures that getSnapshot
result is cached by default which is required by `useSyncExternalStore`.
- `props` are a property of the base vm class so that actual VMs don't
  have to keep creating this property.

* Update `TextualEventViewModel`

* Fix test

* Rename `TextualEvent` to `TextualEventView`

* Fix snapshot object not being merged

* Rename directory to `EventTileView`

* Fix broken snapshot

* Add test for snapshot class
This commit is contained in:
R Midhun Suresh
2025-08-06 12:29:32 +00:00
committed by GitHub
parent 15f1291cbc
commit ee37734cfc
12 changed files with 130 additions and 34 deletions
@@ -8,10 +8,16 @@ Please see LICENSE files in the repository root for full details.
import { MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/matrix";
import { TextualEventViewModel } from "../../../src/viewmodels/event-tiles/TextualEventViewModel";
import { stubClient } from "../../test-utils";
jest.mock("../../../src/TextForEvent.tsx", () => ({
textForEvent: jest.fn().mockReturnValue("Test Message"),
}));
describe("TextualEventViewModel", () => {
it("should update when the sentinel updates", () => {
const fakeEvent = new MatrixEvent({});
stubClient();
const vm = new TextualEventViewModel({
showHiddenEvents: false,