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
@@ -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";
|
||||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -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 {
|
||||||
/**
|
/**
|
||||||