();
private dropdownRootElement: HTMLDivElement = null;
diff --git a/src/components/views/elements/EditableItemList.tsx b/src/components/views/elements/EditableItemList.tsx
index a6d1d3f06f..d33990b570 100644
--- a/src/components/views/elements/EditableItemList.tsx
+++ b/src/components/views/elements/EditableItemList.tsx
@@ -19,7 +19,6 @@ import React from "react";
import { _t } from '../../../languageHandler';
import Field from "./Field";
import AccessibleButton from "./AccessibleButton";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IItemProps {
index?: number;
@@ -107,7 +106,6 @@ interface IProps {
onNewItemChanged?(item: string): void;
}
-@replaceableComponent("views.elements.EditableItemList")
export default class EditableItemList extends React.PureComponent {
protected onItemAdded = (e) => {
e.stopPropagation();
diff --git a/src/components/views/elements/EditableText.tsx b/src/components/views/elements/EditableText.tsx
index 8a9e4ed91a..344db02c3d 100644
--- a/src/components/views/elements/EditableText.tsx
+++ b/src/components/views/elements/EditableText.tsx
@@ -19,7 +19,6 @@ import React, { createRef } from 'react';
import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts";
import { getKeyBindingsManager } from "../../../KeyBindingsManager";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
enum Phases {
Display = "display",
@@ -45,7 +44,6 @@ interface IState {
phase: Phases;
}
-@replaceableComponent("views.elements.EditableText")
export default class EditableText extends React.Component {
// we track value as an JS object field rather than in React state
// as React doesn't play nice with contentEditable.
diff --git a/src/components/views/elements/EditableTextContainer.tsx b/src/components/views/elements/EditableTextContainer.tsx
index ede1e8a655..d452cf10f0 100644
--- a/src/components/views/elements/EditableTextContainer.tsx
+++ b/src/components/views/elements/EditableTextContainer.tsx
@@ -16,7 +16,6 @@ limitations under the License.
import React from 'react';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Spinner from "./Spinner";
import EditableText from "./EditableText";
@@ -56,7 +55,6 @@ interface IState {
* similarly asynchronous way. If this is not provided, the initial value is
* taken from the 'initialValue' property.
*/
-@replaceableComponent("views.elements.EditableTextContainer")
export default class EditableTextContainer extends React.Component {
private unmounted = false;
public static defaultProps: Partial = {
diff --git a/src/components/views/elements/ErrorBoundary.tsx b/src/components/views/elements/ErrorBoundary.tsx
index 45fb9eafd4..91e56b82be 100644
--- a/src/components/views/elements/ErrorBoundary.tsx
+++ b/src/components/views/elements/ErrorBoundary.tsx
@@ -22,7 +22,6 @@ import { MatrixClientPeg } from '../../../MatrixClientPeg';
import PlatformPeg from '../../../PlatformPeg';
import Modal from '../../../Modal';
import SdkConfig from "../../../SdkConfig";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import BugReportDialog from '../dialogs/BugReportDialog';
import AccessibleButton from './AccessibleButton';
@@ -34,7 +33,6 @@ interface IState {
* This error boundary component can be used to wrap large content areas and
* catch exceptions during rendering in the component tree below them.
*/
-@replaceableComponent("views.elements.ErrorBoundary")
export default class ErrorBoundary extends React.PureComponent<{}, IState> {
constructor(props) {
super(props);
diff --git a/src/components/views/elements/EventListSummary.tsx b/src/components/views/elements/EventListSummary.tsx
index 748c3b353b..1fc99c774a 100644
--- a/src/components/views/elements/EventListSummary.tsx
+++ b/src/components/views/elements/EventListSummary.tsx
@@ -25,7 +25,6 @@ import { _t } from '../../../languageHandler';
import { formatCommaSeparatedList } from '../../../utils/FormattingUtils';
import { isValid3pidInvite } from "../../../RoomInvite";
import GenericEventListSummary from "./GenericEventListSummary";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { RightPanelPhases } from '../../../stores/right-panel/RightPanelStorePhases';
import { jsxJoin } from '../../../utils/ReactUtils';
import { Layout } from '../../../settings/enums/Layout';
@@ -79,7 +78,6 @@ enum TransitionType {
const SEP = ",";
-@replaceableComponent("views.elements.EventListSummary")
export default class EventListSummary extends React.Component {
static contextType = RoomContext;
public context!: React.ContextType;
diff --git a/src/components/views/elements/EventTilePreview.tsx b/src/components/views/elements/EventTilePreview.tsx
index 069a743d7f..86f8eeaf20 100644
--- a/src/components/views/elements/EventTilePreview.tsx
+++ b/src/components/views/elements/EventTilePreview.tsx
@@ -22,7 +22,6 @@ import { RoomMember } from 'matrix-js-sdk/src/models/room-member';
import * as Avatar from '../../../Avatar';
import EventTile from '../rooms/EventTile';
import { Layout } from "../../../settings/enums/Layout";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Spinner from './Spinner';
interface IProps {
@@ -63,7 +62,6 @@ interface IState {
const AVATAR_SIZE = 32;
-@replaceableComponent("views.elements.EventTilePreview")
export default class EventTilePreview extends React.Component {
constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/Field.tsx b/src/components/views/elements/Field.tsx
index 578ecb3333..3942a9eb1d 100644
--- a/src/components/views/elements/Field.tsx
+++ b/src/components/views/elements/Field.tsx
@@ -18,9 +18,9 @@ import React, { InputHTMLAttributes, SelectHTMLAttributes, TextareaHTMLAttribute
import classNames from 'classnames';
import { debounce } from "lodash";
-import * as sdk from '../../../index';
import { IFieldState, IValidationResult } from "./Validation";
import { ComponentClass } from "../../../@types/common";
+import Tooltip from "./Tooltip";
// Invoke validation from user input (when typing, etc.) at most once every N ms.
const VALIDATION_THROTTLE_MS = 200;
@@ -295,8 +295,6 @@ export default class Field extends React.PureComponent {
);
// Handle displaying feedback on validity
- // FIXME: Using an import will result in test failures
- const Tooltip = sdk.getComponent("elements.Tooltip");
let fieldTooltip;
if (tooltipContent || this.state.feedback) {
fieldTooltip = {
constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/ImageView.tsx b/src/components/views/elements/ImageView.tsx
index df9b128885..fd24bc745a 100644
--- a/src/components/views/elements/ImageView.tsx
+++ b/src/components/views/elements/ImageView.tsx
@@ -31,7 +31,6 @@ import SettingsStore from "../../../settings/SettingsStore";
import { formatFullDate } from "../../../DateUtils";
import dis from '../../../dispatcher/dispatcher';
import { Action } from '../../../dispatcher/actions';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks";
import { normalizeWheelEvent } from "../../../utils/Mouse";
import { IDialogProps } from '../dialogs/IDialogProps';
@@ -90,7 +89,6 @@ interface IState {
contextMenuDisplayed: boolean;
}
-@replaceableComponent("views.elements.ImageView")
export default class ImageView extends React.Component {
constructor(props) {
super(props);
diff --git a/src/components/views/elements/InfoTooltip.tsx b/src/components/views/elements/InfoTooltip.tsx
index f77a07bd21..d34a6f9bb0 100644
--- a/src/components/views/elements/InfoTooltip.tsx
+++ b/src/components/views/elements/InfoTooltip.tsx
@@ -20,7 +20,6 @@ import classNames from 'classnames';
import { Alignment } from './Tooltip';
import { _t } from "../../../languageHandler";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import TooltipTarget from './TooltipTarget';
export enum InfoTooltipKind {
@@ -35,7 +34,6 @@ interface ITooltipProps {
kind?: InfoTooltipKind;
}
-@replaceableComponent("views.elements.InfoTooltip")
export default class InfoTooltip extends React.PureComponent {
constructor(props: ITooltipProps) {
super(props);
diff --git a/src/components/views/elements/InlineSpinner.tsx b/src/components/views/elements/InlineSpinner.tsx
index 3a404430db..385e317cda 100644
--- a/src/components/views/elements/InlineSpinner.tsx
+++ b/src/components/views/elements/InlineSpinner.tsx
@@ -17,7 +17,6 @@ limitations under the License.
import React from "react";
import { _t } from "../../../languageHandler";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
w?: number;
@@ -25,7 +24,6 @@ interface IProps {
children?: React.ReactNode;
}
-@replaceableComponent("views.elements.InlineSpinner")
export default class InlineSpinner extends React.PureComponent {
static defaultProps = {
w: 16,
diff --git a/src/components/views/elements/InviteReason.tsx b/src/components/views/elements/InviteReason.tsx
index 13a62d463c..d3f7e34031 100644
--- a/src/components/views/elements/InviteReason.tsx
+++ b/src/components/views/elements/InviteReason.tsx
@@ -19,7 +19,6 @@ import React from "react";
import { sanitizedHtmlNode } from "../../../HtmlUtils";
import { _t } from "../../../languageHandler";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
reason: string;
@@ -30,7 +29,6 @@ interface IState {
hidden: boolean;
}
-@replaceableComponent("views.elements.InviteReason")
export default class InviteReason extends React.PureComponent {
constructor(props) {
super(props);
diff --git a/src/components/views/elements/LabelledToggleSwitch.tsx b/src/components/views/elements/LabelledToggleSwitch.tsx
index 24647df502..952c92ac42 100644
--- a/src/components/views/elements/LabelledToggleSwitch.tsx
+++ b/src/components/views/elements/LabelledToggleSwitch.tsx
@@ -17,7 +17,6 @@ limitations under the License.
import React from "react";
import ToggleSwitch from "./ToggleSwitch";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
// The value for the toggle switch
@@ -35,7 +34,6 @@ interface IProps {
onChange(checked: boolean): void;
}
-@replaceableComponent("views.elements.LabelledToggleSwitch")
export default class LabelledToggleSwitch extends React.PureComponent {
render() {
// This is a minimal version of a SettingsFlag
diff --git a/src/components/views/elements/LanguageDropdown.tsx b/src/components/views/elements/LanguageDropdown.tsx
index c6c52ee4e8..7d19dbfce1 100644
--- a/src/components/views/elements/LanguageDropdown.tsx
+++ b/src/components/views/elements/LanguageDropdown.tsx
@@ -20,7 +20,6 @@ import React from 'react';
import * as languageHandler from '../../../languageHandler';
import SettingsStore from "../../../settings/SettingsStore";
import { _t } from "../../../languageHandler";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Spinner from "./Spinner";
import Dropdown from "./Dropdown";
@@ -42,7 +41,6 @@ interface IState {
langs: string[];
}
-@replaceableComponent("views.elements.LanguageDropdown")
export default class LanguageDropdown extends React.Component {
constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/LazyRenderList.tsx b/src/components/views/elements/LazyRenderList.tsx
index 6a1920bec9..d573a38104 100644
--- a/src/components/views/elements/LazyRenderList.tsx
+++ b/src/components/views/elements/LazyRenderList.tsx
@@ -16,8 +16,6 @@ limitations under the License.
import React from "react";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
-
class ItemRange {
constructor(
public topCount: number,
@@ -84,7 +82,6 @@ interface IState {
renderRange: ItemRange;
}
-@replaceableComponent("views.elements.LazyRenderList")
export default class LazyRenderList extends React.Component, IState> {
public static defaultProps: Partial> = {
overflowItems: 20,
diff --git a/src/components/views/elements/PersistedElement.tsx b/src/components/views/elements/PersistedElement.tsx
index 97a197d2bf..cd8239a1f1 100644
--- a/src/components/views/elements/PersistedElement.tsx
+++ b/src/components/views/elements/PersistedElement.tsx
@@ -22,7 +22,6 @@ import { isNullOrUndefined } from "matrix-js-sdk/src/utils";
import dis from '../../../dispatcher/dispatcher';
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { ActionPayload } from "../../../dispatcher/payloads";
export const getPersistKey = (appId: string) => 'widget_' + appId;
@@ -70,7 +69,6 @@ interface IProps {
* children are made visible and are positioned into a div that is given the same
* bounding rect as the parent of PE.
*/
-@replaceableComponent("views.elements.PersistedElement")
export default class PersistedElement extends React.Component {
private resizeObserver: ResizeObserver;
private dispatcherRef: string;
diff --git a/src/components/views/elements/PersistentApp.tsx b/src/components/views/elements/PersistentApp.tsx
index fd78237bfb..5851c1c614 100644
--- a/src/components/views/elements/PersistentApp.tsx
+++ b/src/components/views/elements/PersistentApp.tsx
@@ -19,7 +19,6 @@ import React, { ContextType } from 'react';
import { Room } from "matrix-js-sdk/src/models/room";
import WidgetUtils from '../../../utils/WidgetUtils';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import AppTile from "./AppTile";
import { IApp } from '../../../stores/WidgetStore';
import MatrixClientContext from "../../../contexts/MatrixClientContext";
@@ -30,7 +29,6 @@ interface IProps {
pointerEvents?: string;
}
-@replaceableComponent("views.elements.PersistentApp")
export default class PersistentApp extends React.Component {
public static contextType = MatrixClientContext;
context: ContextType;
diff --git a/src/components/views/elements/Pill.js b/src/components/views/elements/Pill.js
index 610135ef99..7d5a9973c7 100644
--- a/src/components/views/elements/Pill.js
+++ b/src/components/views/elements/Pill.js
@@ -20,16 +20,15 @@ import { RoomMember } from 'matrix-js-sdk/src/models/room-member';
import PropTypes from 'prop-types';
import { logger } from "matrix-js-sdk/src/logger";
-import * as sdk from '../../../index';
import dis from '../../../dispatcher/dispatcher';
import { MatrixClientPeg } from '../../../MatrixClientPeg';
import { getPrimaryPermalinkEntity, parsePermalink } from "../../../utils/permalinks/Permalinks";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import { Action } from "../../../dispatcher/actions";
import Tooltip from './Tooltip';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
+import RoomAvatar from "../avatars/RoomAvatar";
+import MemberAvatar from "../avatars/MemberAvatar";
-@replaceableComponent("views.elements.Pill")
class Pill extends React.Component {
static roomNotifPos(text) {
return text.indexOf("@room");
@@ -183,9 +182,6 @@ class Pill extends React.Component {
};
render() {
- const MemberAvatar = sdk.getComponent('avatars.MemberAvatar');
- const RoomAvatar = sdk.getComponent('avatars.RoomAvatar');
-
const resource = this.state.resourceId;
let avatar = null;
diff --git a/src/components/views/elements/PowerSelector.tsx b/src/components/views/elements/PowerSelector.tsx
index 2cf028e225..3a9e87d158 100644
--- a/src/components/views/elements/PowerSelector.tsx
+++ b/src/components/views/elements/PowerSelector.tsx
@@ -19,7 +19,6 @@ import React from 'react';
import * as Roles from '../../../Roles';
import { _t } from '../../../languageHandler';
import Field from "./Field";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts";
import { getKeyBindingsManager } from "../../../KeyBindingsManager";
@@ -55,7 +54,6 @@ interface IState {
customLevel?: number;
}
-@replaceableComponent("views.elements.PowerSelector")
export default class PowerSelector extends React.Component {
public static defaultProps: Partial = {
maxValue: Infinity,
diff --git a/src/components/views/elements/ReplyChain.tsx b/src/components/views/elements/ReplyChain.tsx
index 6b8d7314ea..11498c5a55 100644
--- a/src/components/views/elements/ReplyChain.tsx
+++ b/src/components/views/elements/ReplyChain.tsx
@@ -29,7 +29,6 @@ import SettingsStore from "../../../settings/SettingsStore";
import { Layout } from "../../../settings/enums/Layout";
import { getUserNameColorClass } from "../../../utils/FormattingUtils";
import { Action } from "../../../dispatcher/actions";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Spinner from './Spinner';
import ReplyTile from "../rooms/ReplyTile";
import Pill from './Pill';
@@ -76,7 +75,6 @@ interface IState {
// This component does no cycle detection, simply because the only way to make such a cycle would be to
// craft event_id's, using a homeserver that generates predictable event IDs; even then the impact would
// be low as each event being loaded (after the first) is triggered by an explicit user action.
-@replaceableComponent("views.elements.ReplyChain")
export default class ReplyChain extends React.Component {
static contextType = RoomContext;
public context!: React.ContextType;
diff --git a/src/components/views/elements/RoomAliasField.tsx b/src/components/views/elements/RoomAliasField.tsx
index a8cf278a30..e99b3b3ea7 100644
--- a/src/components/views/elements/RoomAliasField.tsx
+++ b/src/components/views/elements/RoomAliasField.tsx
@@ -18,7 +18,6 @@ import React, { createRef, KeyboardEventHandler } from "react";
import { _t } from '../../../languageHandler';
import withValidation from './Validation';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Field, { IValidateOpts } from "./Field";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
@@ -39,7 +38,6 @@ interface IState {
}
// Controlled form component wrapping Field for inputting a room alias scoped to a given domain
-@replaceableComponent("views.elements.RoomAliasField")
export default class RoomAliasField extends React.PureComponent {
static contextType = MatrixClientContext;
public context!: React.ContextType;
diff --git a/src/components/views/elements/SettingsFlag.tsx b/src/components/views/elements/SettingsFlag.tsx
index a0af045c26..3437440f00 100644
--- a/src/components/views/elements/SettingsFlag.tsx
+++ b/src/components/views/elements/SettingsFlag.tsx
@@ -22,7 +22,6 @@ import { _t } from '../../../languageHandler';
import ToggleSwitch from "./ToggleSwitch";
import StyledCheckbox from "./StyledCheckbox";
import { SettingLevel } from "../../../settings/SettingLevel";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
// The setting must be a boolean
@@ -41,7 +40,6 @@ interface IState {
value: boolean;
}
-@replaceableComponent("views.elements.SettingsFlag")
export default class SettingsFlag extends React.Component {
constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/Slider.tsx b/src/components/views/elements/Slider.tsx
index a4c3147a73..a5103f2bd8 100644
--- a/src/components/views/elements/Slider.tsx
+++ b/src/components/views/elements/Slider.tsx
@@ -16,8 +16,6 @@ limitations under the License.
import * as React from 'react';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
-
interface IProps {
// A callback for the selected value
onSelectionChange: (value: number) => void;
@@ -36,7 +34,6 @@ interface IProps {
disabled: boolean;
}
-@replaceableComponent("views.elements.Slider")
export default class Slider extends React.Component {
// offset is a terrible inverse approximation.
// if the values represents some function f(x) = y where x is the
diff --git a/src/components/views/elements/SpellCheckLanguagesDropdown.tsx b/src/components/views/elements/SpellCheckLanguagesDropdown.tsx
index 972dac909a..126898a4ff 100644
--- a/src/components/views/elements/SpellCheckLanguagesDropdown.tsx
+++ b/src/components/views/elements/SpellCheckLanguagesDropdown.tsx
@@ -20,7 +20,6 @@ import Dropdown from "../../views/elements/Dropdown";
import PlatformPeg from "../../../PlatformPeg";
import SettingsStore from "../../../settings/SettingsStore";
import { _t } from "../../../languageHandler";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Spinner from "./Spinner";
function languageMatchesSearchQuery(query, language) {
@@ -40,7 +39,6 @@ interface SpellCheckLanguagesDropdownIState {
languages: any;
}
-@replaceableComponent("views.elements.SpellCheckLanguagesDropdown")
export default class SpellCheckLanguagesDropdown extends React.Component {
constructor(props) {
diff --git a/src/components/views/elements/Spoiler.tsx b/src/components/views/elements/Spoiler.tsx
index 4613f8914b..7d47bb030e 100644
--- a/src/components/views/elements/Spoiler.tsx
+++ b/src/components/views/elements/Spoiler.tsx
@@ -16,8 +16,6 @@
import React from 'react';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
-
interface IProps {
reason?: string;
contentHtml: string;
@@ -27,7 +25,6 @@ interface IState {
visible: boolean;
}
-@replaceableComponent("views.elements.Spoiler")
export default class Spoiler extends React.Component {
constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/StyledCheckbox.tsx b/src/components/views/elements/StyledCheckbox.tsx
index 6fe59562bb..333fbb8adb 100644
--- a/src/components/views/elements/StyledCheckbox.tsx
+++ b/src/components/views/elements/StyledCheckbox.tsx
@@ -18,8 +18,6 @@ import React from "react";
import { randomString } from "matrix-js-sdk/src/randomstring";
import classnames from 'classnames';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
-
export enum CheckboxStyle {
Solid = "solid",
Outline = "outline",
@@ -34,7 +32,6 @@ interface IProps extends React.InputHTMLAttributes {
interface IState {
}
-@replaceableComponent("views.elements.StyledCheckbox")
export default class StyledCheckbox extends React.PureComponent {
private id: string;
diff --git a/src/components/views/elements/StyledRadioButton.tsx b/src/components/views/elements/StyledRadioButton.tsx
index 25f525ebf4..14cc7d22ef 100644
--- a/src/components/views/elements/StyledRadioButton.tsx
+++ b/src/components/views/elements/StyledRadioButton.tsx
@@ -17,8 +17,6 @@ limitations under the License.
import React from 'react';
import classnames from 'classnames';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
-
interface IProps extends React.InputHTMLAttributes {
inputRef?: React.RefObject;
outlined?: boolean;
@@ -31,7 +29,6 @@ interface IProps extends React.InputHTMLAttributes {
interface IState {
}
-@replaceableComponent("views.elements.StyledRadioButton")
export default class StyledRadioButton extends React.PureComponent {
public static readonly defaultProps = {
className: '',
diff --git a/src/components/views/elements/SyntaxHighlight.tsx b/src/components/views/elements/SyntaxHighlight.tsx
index bc4b3111f3..861eb18e83 100644
--- a/src/components/views/elements/SyntaxHighlight.tsx
+++ b/src/components/views/elements/SyntaxHighlight.tsx
@@ -17,14 +17,11 @@ limitations under the License.
import React from 'react';
import hljs from 'highlight.js';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
-
interface IProps {
language?: string;
children: string;
}
-@replaceableComponent("views.elements.SyntaxHighlight")
export default class SyntaxHighlight extends React.PureComponent {
public render(): JSX.Element {
const { children: content, language } = this.props;
diff --git a/src/components/views/elements/TagComposer.tsx b/src/components/views/elements/TagComposer.tsx
index 9937020fff..19f3523f06 100644
--- a/src/components/views/elements/TagComposer.tsx
+++ b/src/components/views/elements/TagComposer.tsx
@@ -16,7 +16,6 @@ limitations under the License.
import React, { ChangeEvent, FormEvent } from "react";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import Field from "./Field";
import { _t } from "../../../languageHandler";
import AccessibleButton from "./AccessibleButton";
@@ -38,7 +37,6 @@ interface IState {
* A simple, controlled, composer for entering string tags. Contains a simple
* input, add button, and per-tag remove button.
*/
-@replaceableComponent("views.elements.TagComposer")
export default class TagComposer extends React.PureComponent {
public constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/TextWithTooltip.tsx b/src/components/views/elements/TextWithTooltip.tsx
index 2b5926f3d7..c8fa5376b8 100644
--- a/src/components/views/elements/TextWithTooltip.tsx
+++ b/src/components/views/elements/TextWithTooltip.tsx
@@ -17,7 +17,6 @@
import React from 'react';
import classNames from 'classnames';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import TooltipTarget from './TooltipTarget';
interface IProps {
@@ -28,7 +27,6 @@ interface IProps {
onClick?: (ev?: React.MouseEvent) => void;
}
-@replaceableComponent("views.elements.TextWithTooltip")
export default class TextWithTooltip extends React.Component {
constructor(props: IProps) {
super(props);
diff --git a/src/components/views/elements/Tooltip.tsx b/src/components/views/elements/Tooltip.tsx
index 47b81c7a2e..189bee393f 100644
--- a/src/components/views/elements/Tooltip.tsx
+++ b/src/components/views/elements/Tooltip.tsx
@@ -21,7 +21,6 @@ import React, { CSSProperties } from 'react';
import ReactDOM from 'react-dom';
import classNames from 'classnames';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import UIStore from "../../../stores/UIStore";
const MIN_TOOLTIP_HEIGHT = 25;
@@ -55,7 +54,6 @@ export interface ITooltipProps {
maxParentWidth?: number;
}
-@replaceableComponent("views.elements.Tooltip")
export default class Tooltip extends React.Component {
private tooltipContainer: HTMLElement;
private parent: Element;
diff --git a/src/components/views/elements/TooltipButton.tsx b/src/components/views/elements/TooltipButton.tsx
index e6b3f6c520..c863ea31b9 100644
--- a/src/components/views/elements/TooltipButton.tsx
+++ b/src/components/views/elements/TooltipButton.tsx
@@ -17,14 +17,12 @@ limitations under the License.
import React from 'react';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import TooltipTarget from './TooltipTarget';
interface IProps {
helpText: React.ReactNode | string;
}
-@replaceableComponent("views.elements.TooltipButton")
export default class TooltipButton extends React.Component {
constructor(props) {
super(props);
diff --git a/src/components/views/elements/TruncatedList.tsx b/src/components/views/elements/TruncatedList.tsx
index 31c5391b07..56d05515df 100644
--- a/src/components/views/elements/TruncatedList.tsx
+++ b/src/components/views/elements/TruncatedList.tsx
@@ -18,7 +18,6 @@ limitations under the License.
import React from 'react';
import { _t } from '../../../languageHandler';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
// The number of elements to show before truncating. If negative, no truncation is done.
@@ -38,7 +37,6 @@ interface IProps {
createOverflowElement?: (overflowCount: number, totalCount: number) => React.ReactNode;
}
-@replaceableComponent("views.elements.TruncatedList")
export default class TruncatedList extends React.Component {
static defaultProps ={
truncateAt: 2,
diff --git a/src/components/views/elements/crypto/VerificationQRCode.tsx b/src/components/views/elements/crypto/VerificationQRCode.tsx
index a5efb1b6ce..16f150af6b 100644
--- a/src/components/views/elements/crypto/VerificationQRCode.tsx
+++ b/src/components/views/elements/crypto/VerificationQRCode.tsx
@@ -17,14 +17,12 @@ limitations under the License.
import React from "react";
import { QRCodeData } from "matrix-js-sdk/src/crypto/verification/QRCode";
-import { replaceableComponent } from "../../../../utils/replaceableComponent";
import QRCode from "../QRCode";
interface IProps {
qrCodeData: QRCodeData;
}
-@replaceableComponent("views.elements.crypto.VerificationQRCode")
export default class VerificationQRCode extends React.PureComponent {
public render(): JSX.Element {
return (
diff --git a/src/components/views/emojipicker/Category.tsx b/src/components/views/emojipicker/Category.tsx
index 395ff1cbc8..7cd5b96bee 100644
--- a/src/components/views/emojipicker/Category.tsx
+++ b/src/components/views/emojipicker/Category.tsx
@@ -21,7 +21,6 @@ import { CATEGORY_HEADER_HEIGHT, EMOJI_HEIGHT, EMOJIS_PER_ROW } from "./EmojiPic
import LazyRenderList from "../elements/LazyRenderList";
import { DATA_BY_CATEGORY, IEmoji } from "../../../emoji";
import Emoji from './Emoji';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
const OVERFLOW_ROWS = 3;
@@ -48,7 +47,6 @@ interface IProps {
onMouseLeave(emoji: IEmoji): void;
}
-@replaceableComponent("views.emojipicker.Category")
class Category extends React.PureComponent {
private renderEmojiRow = (rowIndex: number) => {
const { onClick, onMouseEnter, onMouseLeave, selectedEmojis, emojis } = this.props;
diff --git a/src/components/views/emojipicker/Emoji.tsx b/src/components/views/emojipicker/Emoji.tsx
index 48194ff7d7..91eada12b3 100644
--- a/src/components/views/emojipicker/Emoji.tsx
+++ b/src/components/views/emojipicker/Emoji.tsx
@@ -19,7 +19,6 @@ import React from 'react';
import { MenuItem } from "../../structures/ContextMenu";
import { IEmoji } from "../../../emoji";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
emoji: IEmoji;
@@ -29,7 +28,6 @@ interface IProps {
onMouseLeave(emoji: IEmoji): void;
}
-@replaceableComponent("views.emojipicker.Emoji")
class Emoji extends React.PureComponent {
render() {
const { onClick, onMouseEnter, onMouseLeave, emoji, selectedEmojis } = this.props;
diff --git a/src/components/views/emojipicker/EmojiPicker.tsx b/src/components/views/emojipicker/EmojiPicker.tsx
index 99f8b561ee..e064df405a 100644
--- a/src/components/views/emojipicker/EmojiPicker.tsx
+++ b/src/components/views/emojipicker/EmojiPicker.tsx
@@ -26,7 +26,6 @@ import Search from "./Search";
import Preview from "./Preview";
import QuickReactions from "./QuickReactions";
import Category, { ICategory, CategoryKey } from "./Category";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
export const CATEGORY_HEADER_HEIGHT = 20;
export const EMOJI_HEIGHT = 35;
@@ -50,7 +49,6 @@ interface IState {
viewportHeight: number;
}
-@replaceableComponent("views.emojipicker.EmojiPicker")
class EmojiPicker extends React.Component {
private readonly recentlyUsed: IEmoji[];
private readonly memoizedDataByCategory: Record;
diff --git a/src/components/views/emojipicker/Header.tsx b/src/components/views/emojipicker/Header.tsx
index e364d87eae..e430ac974b 100644
--- a/src/components/views/emojipicker/Header.tsx
+++ b/src/components/views/emojipicker/Header.tsx
@@ -20,7 +20,6 @@ import classNames from "classnames";
import { _t } from "../../../languageHandler";
import { CategoryKey, ICategory } from "./Category";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { getKeyBindingsManager } from "../../../KeyBindingsManager";
import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts";
@@ -29,7 +28,6 @@ interface IProps {
onAnchorClick(id: CategoryKey): void;
}
-@replaceableComponent("views.emojipicker.Header")
class Header extends React.PureComponent {
private findNearestEnabled(index: number, delta: number) {
index += this.props.categories.length;
diff --git a/src/components/views/emojipicker/Preview.tsx b/src/components/views/emojipicker/Preview.tsx
index 710b4545df..bcbbec1feb 100644
--- a/src/components/views/emojipicker/Preview.tsx
+++ b/src/components/views/emojipicker/Preview.tsx
@@ -18,13 +18,11 @@ limitations under the License.
import React from 'react';
import { IEmoji } from "../../../emoji";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
interface IProps {
emoji: IEmoji;
}
-@replaceableComponent("views.emojipicker.Preview")
class Preview extends React.PureComponent {
render() {
const { unicode, label, shortcodes: [shortcode] } = this.props.emoji;
diff --git a/src/components/views/emojipicker/QuickReactions.tsx b/src/components/views/emojipicker/QuickReactions.tsx
index 4c654a0806..c0336a759d 100644
--- a/src/components/views/emojipicker/QuickReactions.tsx
+++ b/src/components/views/emojipicker/QuickReactions.tsx
@@ -20,7 +20,6 @@ import React from 'react';
import { _t } from '../../../languageHandler';
import { getEmojiFromUnicode, IEmoji } from "../../../emoji";
import Emoji from "./Emoji";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
// We use the variation-selector Heart in Quick Reactions for some reason
const QUICK_REACTIONS = ["👍", "👎", "😄", "🎉", "😕", "❤️", "🚀", "👀"].map(emoji => {
@@ -40,7 +39,6 @@ interface IState {
hover?: IEmoji;
}
-@replaceableComponent("views.emojipicker.QuickReactions")
class QuickReactions extends React.Component {
constructor(props) {
super(props);
diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx
index df18949233..c53f5a64f9 100644
--- a/src/components/views/emojipicker/ReactionPicker.tsx
+++ b/src/components/views/emojipicker/ReactionPicker.tsx
@@ -23,7 +23,6 @@ import { EventType, RelationType } from 'matrix-js-sdk/src/@types/event';
import EmojiPicker from "./EmojiPicker";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
import dis from "../../../dispatcher/dispatcher";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { Action } from '../../../dispatcher/actions';
import RoomContext from "../../../contexts/RoomContext";
import { FocusComposerPayload } from '../../../dispatcher/payloads/FocusComposerPayload';
@@ -38,7 +37,6 @@ interface IState {
selectedEmojis: Set;
}
-@replaceableComponent("views.emojipicker.ReactionPicker")
class ReactionPicker extends React.Component {
static contextType = RoomContext;
public context!: React.ContextType;
diff --git a/src/components/views/emojipicker/Search.tsx b/src/components/views/emojipicker/Search.tsx
index 98273e926b..de09421010 100644
--- a/src/components/views/emojipicker/Search.tsx
+++ b/src/components/views/emojipicker/Search.tsx
@@ -18,7 +18,6 @@ limitations under the License.
import React from 'react';
import { _t } from '../../../languageHandler';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts";
import { getKeyBindingsManager } from "../../../KeyBindingsManager";
@@ -28,7 +27,6 @@ interface IProps {
onEnter(): void;
}
-@replaceableComponent("views.emojipicker.Search")
class Search extends React.PureComponent {
private inputRef = React.createRef();
diff --git a/src/components/views/location/LocationPicker.tsx b/src/components/views/location/LocationPicker.tsx
index 4eaef0365b..c7e72c1949 100644
--- a/src/components/views/location/LocationPicker.tsx
+++ b/src/components/views/location/LocationPicker.tsx
@@ -23,7 +23,6 @@ import classNames from 'classnames';
import { Icon as LocationIcon } from '../../../../res/img/element-icons/location.svg';
import { _t } from '../../../languageHandler';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import MatrixClientContext from '../../../contexts/MatrixClientContext';
import Modal from '../../../Modal';
import SdkConfig from '../../../SdkConfig';
@@ -54,7 +53,6 @@ interface IState {
const isSharingOwnLocation = (shareType: LocationShareType): boolean =>
shareType === LocationShareType.Own || shareType === LocationShareType.Live;
-@replaceableComponent("views.location.LocationPicker")
class LocationPicker extends React.Component {
public static contextType = MatrixClientContext;
public context!: React.ContextType;
diff --git a/src/components/views/location/LocationViewDialog.tsx b/src/components/views/location/LocationViewDialog.tsx
index 2c6e154ac0..236bd754d9 100644
--- a/src/components/views/location/LocationViewDialog.tsx
+++ b/src/components/views/location/LocationViewDialog.tsx
@@ -18,7 +18,6 @@ import React from 'react';
import { MatrixEvent } from 'matrix-js-sdk/src/models/event';
import { ClientEvent, IClientWellKnown, MatrixClient } from 'matrix-js-sdk/src/client';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import BaseDialog from "../dialogs/BaseDialog";
import { IDialogProps } from "../dialogs/IDialogProps";
import { LocationBodyContent } from '../messages/MLocationBody';
@@ -34,7 +33,6 @@ interface IState {
error: Error;
}
-@replaceableComponent("views.location.LocationViewDialog")
export default class LocationViewDialog extends React.Component {
private coords: GeolocationCoordinates;
private map?: maplibregl.Map;
diff --git a/src/components/views/messages/DateSeparator.tsx b/src/components/views/messages/DateSeparator.tsx
index e7aeb3e155..54dde16dac 100644
--- a/src/components/views/messages/DateSeparator.tsx
+++ b/src/components/views/messages/DateSeparator.tsx
@@ -21,7 +21,6 @@ import { logger } from "matrix-js-sdk/src/logger";
import { _t } from '../../../languageHandler';
import { formatFullDateNoTime } from '../../../DateUtils';
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { MatrixClientPeg } from '../../../MatrixClientPeg';
import dis from '../../../dispatcher/dispatcher';
import { Action } from '../../../dispatcher/actions';
@@ -61,7 +60,6 @@ interface IState {
jumpToDateEnabled: boolean;
}
-@replaceableComponent("views.messages.DateSeparator")
export default class DateSeparator extends React.Component {
private settingWatcherRef = null;
diff --git a/src/components/views/messages/DownloadActionButton.tsx b/src/components/views/messages/DownloadActionButton.tsx
index b4ed4af0d3..e9152579d7 100644
--- a/src/components/views/messages/DownloadActionButton.tsx
+++ b/src/components/views/messages/DownloadActionButton.tsx
@@ -22,7 +22,6 @@ import { MediaEventHelper } from "../../../utils/MediaEventHelper";
import { RovingAccessibleTooltipButton } from "../../../accessibility/RovingTabIndex";
import Spinner from "../elements/Spinner";
import { _t, _td } from "../../../languageHandler";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import { FileDownloader } from "../../../utils/FileDownloader";
interface IProps {
@@ -40,7 +39,6 @@ interface IState {
tooltip: string;
}
-@replaceableComponent("views.messages.DownloadActionButton")
export default class DownloadActionButton extends React.PureComponent {
private downloader = new FileDownloader();
diff --git a/src/components/views/messages/EditHistoryMessage.tsx b/src/components/views/messages/EditHistoryMessage.tsx
index 116bfe8268..30922b62e5 100644
--- a/src/components/views/messages/EditHistoryMessage.tsx
+++ b/src/components/views/messages/EditHistoryMessage.tsx
@@ -26,7 +26,6 @@ import { _t } from '../../../languageHandler';
import { MatrixClientPeg } from '../../../MatrixClientPeg';
import Modal from '../../../Modal';
import RedactedBody from "./RedactedBody";
-import { replaceableComponent } from "../../../utils/replaceableComponent";
import AccessibleButton from "../elements/AccessibleButton";
import ConfirmAndWaitRedactDialog from "../dialogs/ConfirmAndWaitRedactDialog";
import ViewSource from "../../structures/ViewSource";
@@ -50,7 +49,6 @@ interface IState {
sendStatus: EventStatus;
}
-@replaceableComponent("views.messages.EditHistoryMessage")
export default class EditHistoryMessage extends React.PureComponent