Shared Components Restructure, Cherry Picked | Room Shell Structure (#32917)

* refactor(shared-components): move composer and right-panel tree

* refactor: cleanup remaining structure leftovers

* test(shared-components): add room shell visual baselines

* Correct Path
This commit is contained in:
Zack
2026-04-14 13:20:15 +00:00
committed by GitHub
parent cc9549da0a
commit 80cf9e5b4a
28 changed files with 43 additions and 43 deletions
@@ -63,7 +63,7 @@ import { toWidgetDescriptor } from "../../../modules/WidgetLifecycleApi";
import { parseUrl } from "../../../utils/UrlUtils"; import { parseUrl } from "../../../utils/UrlUtils";
import RightPanelStore from "../../../stores/right-panel/RightPanelStore.ts"; import RightPanelStore from "../../../stores/right-panel/RightPanelStore.ts";
import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases.ts"; import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases.ts";
import { WidgetContextMenu } from "../../../viewmodels/right-panel/WidgetContextMenuViewModel.tsx"; import { WidgetContextMenu } from "../../../viewmodels/room/right-panel/WidgetContextMenuViewModel.tsx";
// Note that there is advice saying allow-scripts shouldn't be used with allow-same-origin // Note that there is advice saying allow-scripts shouldn't be used with allow-same-origin
// because that would allow the iframe to programmatically remove the sandbox attribute, but // because that would allow the iframe to programmatically remove the sandbox attribute, but
@@ -31,7 +31,7 @@ import { IntegrationManagers } from "../../../integrations/IntegrationManagers";
import EmptyState from "./EmptyState"; import EmptyState from "./EmptyState";
import { shouldShowComponent } from "../../../customisations/helpers/UIComponents.ts"; import { shouldShowComponent } from "../../../customisations/helpers/UIComponents.ts";
import { UIComponent } from "../../../settings/UIFeature.ts"; import { UIComponent } from "../../../settings/UIFeature.ts";
import { WidgetContextMenu } from "../../../viewmodels/right-panel/WidgetContextMenuViewModel.tsx"; import { WidgetContextMenu } from "../../../viewmodels/room/right-panel/WidgetContextMenuViewModel.tsx";
interface Props { interface Props {
room: Room; room: Room;
@@ -18,7 +18,7 @@ import { ContextMenuButton, useContextMenu } from "../../structures/ContextMenu"
import { WidgetLayoutStore } from "../../../stores/widgets/WidgetLayoutStore"; import { WidgetLayoutStore } from "../../../stores/widgets/WidgetLayoutStore";
import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; import RightPanelStore from "../../../stores/right-panel/RightPanelStore";
import Heading from "../typography/Heading"; import Heading from "../typography/Heading";
import { WidgetContextMenu } from "../../../viewmodels/right-panel/WidgetContextMenuViewModel"; import { WidgetContextMenu } from "../../../viewmodels/room/right-panel/WidgetContextMenuViewModel";
interface IProps { interface IProps {
room: Room; room: Room;
@@ -17,22 +17,22 @@ import {
} from "@element-hq/web-shared-components"; } from "@element-hq/web-shared-components";
import { type ApprovalOpts, WidgetLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WidgetLifecycle"; import { type ApprovalOpts, WidgetLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WidgetLifecycle";
import ErrorDialog from "../../components/views/dialogs/ErrorDialog"; import ErrorDialog from "../../../components/views/dialogs/ErrorDialog";
import QuestionDialog from "../../components/views/dialogs/QuestionDialog"; import QuestionDialog from "../../../components/views/dialogs/QuestionDialog";
import MatrixClientContext from "../../contexts/MatrixClientContext"; import MatrixClientContext from "../../../contexts/MatrixClientContext";
import { useScopedRoomContext } from "../../contexts/ScopedRoomContext"; import { useScopedRoomContext } from "../../../contexts/ScopedRoomContext";
import { _t } from "../../languageHandler"; import { _t } from "../../../languageHandler";
import { getConfigLivestreamUrl, startJitsiAudioLivestream } from "../../Livestream"; import { getConfigLivestreamUrl, startJitsiAudioLivestream } from "../../../Livestream";
import Modal from "../../Modal"; import Modal from "../../../Modal";
import SettingsStore from "../../settings/SettingsStore"; import SettingsStore from "../../../settings/SettingsStore";
import { WidgetLayoutStore } from "../../stores/widgets/WidgetLayoutStore"; import { WidgetLayoutStore } from "../../../stores/widgets/WidgetLayoutStore";
import { WidgetMessagingStore } from "../../stores/widgets/WidgetMessagingStore"; import { WidgetMessagingStore } from "../../../stores/widgets/WidgetMessagingStore";
import { isAppWidget } from "../../stores/WidgetStore"; import { isAppWidget } from "../../../stores/WidgetStore";
import WidgetUtils from "../../utils/WidgetUtils"; import WidgetUtils from "../../../utils/WidgetUtils";
import { WidgetType } from "../../widgets/WidgetType"; import { WidgetType } from "../../../widgets/WidgetType";
import { ModuleRunner } from "../../modules/ModuleRunner"; import { ModuleRunner } from "../../../modules/ModuleRunner";
import { ElementWidget, type WidgetMessaging } from "../../stores/widgets/WidgetMessaging"; import { ElementWidget, type WidgetMessaging } from "../../../stores/widgets/WidgetMessaging";
import dis from "../../dispatcher/dispatcher"; import dis from "../../../dispatcher/dispatcher";
const checkRevokeButtonState = ( const checkRevokeButtonState = (
cli: MatrixClient, cli: MatrixClient,
@@ -12,18 +12,18 @@ import { type MatrixClient, Room } from "matrix-js-sdk/src/matrix";
import { import {
WidgetContextMenuViewModel, WidgetContextMenuViewModel,
type WidgetContextMenuViewModelProps, type WidgetContextMenuViewModelProps,
} from "../../../src/viewmodels/right-panel/WidgetContextMenuViewModel"; } from "../../../../src/viewmodels/room/right-panel/WidgetContextMenuViewModel";
import { stubClient } from "../../test-utils"; import { stubClient } from "../../../test-utils";
import WidgetUtils from "../../../src/utils/WidgetUtils"; import WidgetUtils from "../../../../src/utils/WidgetUtils";
import { type IApp } from "../../../src/utils/WidgetUtils-types"; import { type IApp } from "../../../../src/utils/WidgetUtils-types";
import { WidgetLayoutStore } from "../../../src/stores/widgets/WidgetLayoutStore"; import { WidgetLayoutStore } from "../../../../src/stores/widgets/WidgetLayoutStore";
import * as livestream from "../../../src/Livestream"; import * as livestream from "../../../../src/Livestream";
import Modal from "../../../src/Modal"; import Modal from "../../../../src/Modal";
import SettingsStore from "../../../src/settings/SettingsStore"; import SettingsStore from "../../../../src/settings/SettingsStore";
import { SettingLevel } from "../../../src/settings/SettingLevel"; import { SettingLevel } from "../../../../src/settings/SettingLevel";
import * as widgetStore from "../../../src/stores/WidgetStore"; import * as widgetStore from "../../../../src/stores/WidgetStore";
import { WidgetMessagingStore } from "../../../src/stores/widgets/WidgetMessagingStore"; import { WidgetMessagingStore } from "../../../../src/stores/widgets/WidgetMessagingStore";
import { type WidgetMessaging } from "../../../src/stores/widgets/WidgetMessaging"; import { type WidgetMessaging } from "../../../../src/stores/widgets/WidgetMessaging";
describe("WidgetContextMenuViewModel", () => { describe("WidgetContextMenuViewModel", () => {
const widgetId = "w1"; const widgetId = "w1";
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

+2 -2
View File
@@ -10,7 +10,7 @@ export * from "./audio/Clock";
export * from "./audio/PlayPauseButton"; export * from "./audio/PlayPauseButton";
export * from "./audio/SeekBar"; export * from "./audio/SeekBar";
export * from "./core/AvatarWithDetails"; export * from "./core/AvatarWithDetails";
export * from "./composer/Banner"; export * from "./room/composer/Banner";
export * from "./crypto/SasEmoji"; export * from "./crypto/SasEmoji";
export * from "./event-tiles/UrlPreviewGroupView"; export * from "./event-tiles/UrlPreviewGroupView";
export * from "./room/timeline/ReadMarker"; export * from "./room/timeline/ReadMarker";
@@ -25,6 +25,7 @@ export * from "./core/pill-input/PillInput";
export * from "./room/RoomStatusBar"; export * from "./room/RoomStatusBar";
export * from "./room/WidgetPip"; export * from "./room/WidgetPip";
export * from "./room/HistoryVisibilityBadge"; export * from "./room/HistoryVisibilityBadge";
export * from "./room/right-panel/WidgetContextMenuView";
export * from "./room/timeline/DateSeparatorView"; export * from "./room/timeline/DateSeparatorView";
export * from "./room/timeline/TimelineSeparator"; export * from "./room/timeline/TimelineSeparator";
export * from "./room/timeline/event-tile/actions/ActionBarView"; export * from "./room/timeline/event-tile/actions/ActionBarView";
@@ -53,7 +54,6 @@ export * from "./room-list/VirtualizedRoomListView/RoomListItemAccessibilityWrap
export * from "./core/utils/Box"; export * from "./core/utils/Box";
export * from "./core/utils/Flex"; export * from "./core/utils/Flex";
export * from "./core/utils/LinkedText"; export * from "./core/utils/LinkedText";
export * from "./right-panel/WidgetContextMenu";
export * from "./core/VirtualizedList"; export * from "./core/VirtualizedList";
export * from "./resize"; export * from "./resize";
@@ -12,7 +12,7 @@ import { Button, InlineSpinner, Text } from "@vector-im/compound-web";
import styles from "./RoomStatusBarView.module.css"; import styles from "./RoomStatusBarView.module.css";
import { type ViewModel, useViewModel } from "../../core/viewmodel"; import { type ViewModel, useViewModel } from "../../core/viewmodel";
import { useI18n } from "../../core/i18n/i18nContext"; import { useI18n } from "../../core/i18n/i18nContext";
import { Banner } from "../../composer/Banner"; import { Banner } from "../composer/Banner";
export interface RoomStatusBarViewActions { export interface RoomStatusBarViewActions {
/** /**
* Called when the user clicks on the 'resend all' button in the 'unsent messages' bar. * Called when the user clicks on the 'resend all' button in the 'unsent messages' bar.
@@ -20,7 +20,7 @@ import ErrorIcon from "@vector-im/compound-design-tokens/assets/web/icons/error"
import InfoIcon from "@vector-im/compound-design-tokens/assets/web/icons/info"; import InfoIcon from "@vector-im/compound-design-tokens/assets/web/icons/info";
import styles from "./Banner.module.css"; import styles from "./Banner.module.css";
import { _t } from "../../core/i18n/i18n"; import { _t } from "../../../core/i18n/i18n";
interface BannerProps { interface BannerProps {
/** /**
@@ -16,8 +16,8 @@ import {
type WidgetContextMenuViewSnapshot, type WidgetContextMenuViewSnapshot,
WidgetContextMenuView, WidgetContextMenuView,
} from "./WidgetContextMenuView"; } from "./WidgetContextMenuView";
import { useMockedViewModel } from "../../core/viewmodel/useMockedViewModel"; import { useMockedViewModel } from "../../../core/viewmodel/useMockedViewModel";
import { withViewDocs } from "../../../.storybook/withViewDocs"; import { withViewDocs } from "../../../../.storybook/withViewDocs";
type WidgetContextMenuViewModelProps = WidgetContextMenuViewSnapshot & WidgetContextMenuViewActions; type WidgetContextMenuViewModelProps = WidgetContextMenuViewSnapshot & WidgetContextMenuViewActions;
@@ -19,9 +19,9 @@ import {
WidgetContextMenuView, WidgetContextMenuView,
} from "./WidgetContextMenuView"; } from "./WidgetContextMenuView";
import * as stories from "./WidgetContextMenuView.stories.tsx"; import * as stories from "./WidgetContextMenuView.stories.tsx";
import { MockViewModel } from "../../core/viewmodel/MockViewModel.ts"; import { MockViewModel } from "../../../core/viewmodel/MockViewModel.ts";
import { I18nApi } from "../../core/i18n/I18nApi.ts"; import { I18nApi } from "../../../core/i18n/I18nApi.ts";
import { I18nContext } from "../../core/i18n/i18nContext.ts"; import { I18nContext } from "../../../core/i18n/i18nContext.ts";
const { Default, OnlyBasicModification } = composeStories(stories); const { Default, OnlyBasicModification } = composeStories(stories);
@@ -9,9 +9,9 @@ import React, { type ReactNode, type JSX } from "react";
import { IconButton, Menu, MenuItem } from "@vector-im/compound-web"; import { IconButton, Menu, MenuItem } from "@vector-im/compound-web";
import TriggerIcon from "@vector-im/compound-design-tokens/assets/web/icons/overflow-horizontal"; import TriggerIcon from "@vector-im/compound-design-tokens/assets/web/icons/overflow-horizontal";
import { type ViewModel } from "../../core/viewmodel/ViewModel.ts"; import { type ViewModel } from "../../../core/viewmodel/ViewModel.ts";
import { useI18n } from "../../core/i18n/i18nContext.ts"; import { useI18n } from "../../../core/i18n/i18nContext.ts";
import { useViewModel } from "../../core/viewmodel/useViewModel.ts"; import { useViewModel } from "../../../core/viewmodel/useViewModel.ts";
export interface WidgetContextMenuViewSnapshot { export interface WidgetContextMenuViewSnapshot {
/** /**