Merge branch 'travis/skinning/pt3-easy-comps' into travis/b1
						commit
						feab649afb
					
				|  | @ -22,6 +22,7 @@ import classNames from "classnames"; | |||
| 
 | ||||
| import {Key} from "../../Keyboard"; | ||||
| import {Writeable} from "../../@types/common"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // Shamelessly ripped off Modal.js.  There's probably a better way
 | ||||
| // of doing reusable widgets like dialog boxes & menus where we go and
 | ||||
|  | @ -91,6 +92,7 @@ interface IState { | |||
| // Generic ContextMenu Portal wrapper
 | ||||
| // all options inside the menu should be of role=menuitem/menuitemcheckbox/menuitemradiobutton and have tabIndex={-1}
 | ||||
| // this will allow the ContextMenu to manage its own focus using arrow keys as per the ARIA guidelines.
 | ||||
| @replaceableComponent("structures.ContextMenu") | ||||
| export class ContextMenu extends React.PureComponent<IProps, IState> { | ||||
|     private initialFocus: HTMLElement; | ||||
| 
 | ||||
|  | @ -467,6 +469,7 @@ export const useContextMenu = <T extends any = HTMLElement>(): ContextMenuTuple< | |||
|     return [isOpen, button, open, close, setIsOpen]; | ||||
| }; | ||||
| 
 | ||||
| @replaceableComponent("structures.LegacyContextMenu") | ||||
| export default class LegacyContextMenu extends ContextMenu { | ||||
|     render() { | ||||
|         return this.renderMenu(false); | ||||
|  |  | |||
|  | @ -21,7 +21,9 @@ import * as sdk from '../../index'; | |||
| import dis from '../../dispatcher/dispatcher'; | ||||
| import classNames from 'classnames'; | ||||
| import * as FormattingUtils from '../../utils/FormattingUtils'; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.CustomRoomTagPanel") | ||||
| class CustomRoomTagPanel extends React.Component { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -26,10 +26,12 @@ import { _t } from '../../languageHandler'; | |||
| import BaseCard from "../views/right_panel/BaseCard"; | ||||
| import {RightPanelPhases} from "../../stores/RightPanelStorePhases"; | ||||
| import DesktopBuildsNotice, {WarningKind} from "../views/elements/DesktopBuildsNotice"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * Component which shows the filtered file using a TimelinePanel | ||||
|  */ | ||||
| @replaceableComponent("structures.FilePanel") | ||||
| class FilePanel extends React.Component { | ||||
|     static propTypes = { | ||||
|         roomId: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -16,7 +16,9 @@ limitations under the License. | |||
| 
 | ||||
| import React from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.GenericErrorPage") | ||||
| export default class GenericErrorPage extends React.PureComponent { | ||||
|     static propTypes = { | ||||
|         title: PropTypes.object.isRequired, // jsx for title
 | ||||
|  |  | |||
|  | @ -30,7 +30,9 @@ import MatrixClientContext from "../../contexts/MatrixClientContext"; | |||
| import AutoHideScrollbar from "./AutoHideScrollbar"; | ||||
| import SettingsStore from "../../settings/SettingsStore"; | ||||
| import UserTagTile from "../views/elements/UserTagTile"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.GroupFilterPanel") | ||||
| class GroupFilterPanel extends React.Component { | ||||
|     static contextType = MatrixClientContext; | ||||
| 
 | ||||
|  |  | |||
|  | @ -39,6 +39,7 @@ import {Group} from "matrix-js-sdk"; | |||
| import {allSettled, sleep} from "../../utils/promise"; | ||||
| import RightPanelStore from "../../stores/RightPanelStore"; | ||||
| import AutoHideScrollbar from "./AutoHideScrollbar"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const LONG_DESC_PLACEHOLDER = _td( | ||||
| `<h1>HTML for your community's page</h1>
 | ||||
|  | @ -391,6 +392,7 @@ class FeaturedUser extends React.Component { | |||
| const GROUP_JOINPOLICY_OPEN = "open"; | ||||
| const GROUP_JOINPOLICY_INVITE = "invite"; | ||||
| 
 | ||||
| @replaceableComponent("structures.GroupView") | ||||
| export default class GroupView extends React.Component { | ||||
|     static propTypes = { | ||||
|         groupId: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -22,11 +22,13 @@ import { | |||
| import { _t } from "../../languageHandler"; | ||||
| import { HostSignupStore } from "../../stores/HostSignupStore"; | ||||
| import SdkConfig from "../../SdkConfig"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps {} | ||||
| 
 | ||||
| interface IState {} | ||||
| 
 | ||||
| @replaceableComponent("structures.HostSignupAction") | ||||
| export default class HostSignupAction extends React.PureComponent<IProps, IState> { | ||||
|     private openDialog = async () => { | ||||
|         await HostSignupStore.instance.setHostSignupActive(true); | ||||
|  |  | |||
|  | @ -17,7 +17,9 @@ limitations under the License. | |||
| import React from "react"; | ||||
| import PropTypes from "prop-types"; | ||||
| import AutoHideScrollbar from "./AutoHideScrollbar"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.IndicatorScrollbar") | ||||
| export default class IndicatorScrollbar extends React.Component { | ||||
|     static propTypes = { | ||||
|         // If true, the scrollbar will append mx_IndicatorScrollbar_leftOverflowIndicator
 | ||||
|  |  | |||
|  | @ -22,9 +22,11 @@ import PropTypes from 'prop-types'; | |||
| import getEntryComponentForLoginType from '../views/auth/InteractiveAuthEntryComponents'; | ||||
| 
 | ||||
| import * as sdk from '../../index'; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| export const ERROR_USER_CANCELLED = new Error("User cancelled auth session"); | ||||
| 
 | ||||
| @replaceableComponent("structures.InteractiveAuthComponent") | ||||
| export default class InteractiveAuthComponent extends React.Component { | ||||
|     static propTypes = { | ||||
|         // matrix client to use for UI auth requests
 | ||||
|  |  | |||
|  | @ -40,6 +40,7 @@ import { MatrixClientPeg } from "../../MatrixClientPeg"; | |||
| import RoomListNumResults from "../views/rooms/RoomListNumResults"; | ||||
| import LeftPanelWidget from "./LeftPanelWidget"; | ||||
| import SpacePanel from "../views/spaces/SpacePanel"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     isMinimized: boolean; | ||||
|  | @ -60,6 +61,7 @@ const cssClasses = [ | |||
|     "mx_RoomSublist_showNButton", | ||||
| ]; | ||||
| 
 | ||||
| @replaceableComponent("structures.LeftPanel") | ||||
| export default class LeftPanel extends React.Component<IProps, IState> { | ||||
|     private listContainerRef: React.RefObject<HTMLDivElement> = createRef(); | ||||
|     private groupFilterPanelWatcherRef: string; | ||||
|  |  | |||
|  | @ -56,6 +56,7 @@ import Modal from "../../Modal"; | |||
| import { ICollapseConfig } from "../../resizer/distributors/collapse"; | ||||
| import HostSignupContainer from '../views/host_signup/HostSignupContainer'; | ||||
| import { IOpts } from "../../createRoom"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // We need to fetch each pinned message individually (if we don't already have it)
 | ||||
| // so each pinned message may trigger a request. Limit the number per room for sanity.
 | ||||
|  | @ -128,6 +129,7 @@ interface IState { | |||
|  * | ||||
|  * Components mounted below us can access the matrix client via the react context. | ||||
|  */ | ||||
| @replaceableComponent("structures.LoggedInView") | ||||
| class LoggedInView extends React.Component<IProps, IState> { | ||||
|     static displayName = 'LoggedInView'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,9 @@ limitations under the License. | |||
| 
 | ||||
| import React from 'react'; | ||||
| import { Resizable } from 're-resizable'; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.MainSplit") | ||||
| export default class MainSplit extends React.Component { | ||||
|     _onResizeStart = () => { | ||||
|         this.props.resizeNotifier.startResizing(); | ||||
|  |  | |||
|  | @ -84,6 +84,7 @@ import DialPadModal from "../views/voip/DialPadModal"; | |||
| import { showToast as showMobileGuideToast } from '../../toasts/MobileGuideToast'; | ||||
| import SpaceStore from "../../stores/SpaceStore"; | ||||
| import SpaceRoomDirectory from "./SpaceRoomDirectory"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /** constants for MatrixChat.state.view */ | ||||
| export enum Views { | ||||
|  | @ -208,6 +209,7 @@ interface IState { | |||
|     roomJustCreatedOpts?: IOpts; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.MatrixChat") | ||||
| export default class MatrixChat extends React.PureComponent<IProps, IState> { | ||||
|     static displayName = "MatrixChat"; | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,6 +34,7 @@ import {textForEvent} from "../../TextForEvent"; | |||
| import IRCTimelineProfileResizer from "../views/elements/IRCTimelineProfileResizer"; | ||||
| import DMRoomMap from "../../utils/DMRoomMap"; | ||||
| import NewRoomIntro from "../views/rooms/NewRoomIntro"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const CONTINUATION_MAX_INTERVAL = 5 * 60 * 1000; // 5 minutes
 | ||||
| const continuedTypes = ['m.sticker', 'm.room.message']; | ||||
|  | @ -66,6 +67,7 @@ const isMembershipChange = (e) => e.getType() === 'm.room.member' || e.getType() | |||
| 
 | ||||
| /* (almost) stateless UI component which builds the event tiles in the room timeline. | ||||
|  */ | ||||
| @replaceableComponent("structures.MessagePanel") | ||||
| export default class MessagePanel extends React.Component { | ||||
|     static propTypes = { | ||||
|         // true to give the component a 'display: none' style.
 | ||||
|  |  | |||
|  | @ -24,7 +24,9 @@ import dis from '../../dispatcher/dispatcher'; | |||
| import AccessibleButton from '../views/elements/AccessibleButton'; | ||||
| import MatrixClientContext from "../../contexts/MatrixClientContext"; | ||||
| import AutoHideScrollbar from "./AutoHideScrollbar"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.MyGroups") | ||||
| export default class MyGroups extends React.Component { | ||||
|     static contextType = MatrixClientContext; | ||||
| 
 | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ import * as React from "react"; | |||
| import { ComponentClass } from "../../@types/common"; | ||||
| import NonUrgentToastStore from "../../stores/NonUrgentToastStore"; | ||||
| import { UPDATE_EVENT } from "../../stores/AsyncStore"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
| } | ||||
|  | @ -26,6 +27,7 @@ interface IState { | |||
|     toasts: ComponentClass[], | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.NonUrgentToastContainer") | ||||
| export default class NonUrgentToastContainer extends React.PureComponent<IProps, IState> { | ||||
|     public constructor(props, context) { | ||||
|         super(props, context); | ||||
|  |  | |||
|  | @ -23,10 +23,12 @@ import { _t } from '../../languageHandler'; | |||
| import {MatrixClientPeg} from "../../MatrixClientPeg"; | ||||
| import * as sdk from "../../index"; | ||||
| import BaseCard from "../views/right_panel/BaseCard"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * Component which shows the global notification list using a TimelinePanel | ||||
|  */ | ||||
| @replaceableComponent("structures.NotificationPanel") | ||||
| class NotificationPanel extends React.Component { | ||||
|     static propTypes = { | ||||
|         onClose: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -34,7 +34,9 @@ import MatrixClientContext from "../../contexts/MatrixClientContext"; | |||
| import {Action} from "../../dispatcher/actions"; | ||||
| import RoomSummaryCard from "../views/right_panel/RoomSummaryCard"; | ||||
| import WidgetCard from "../views/right_panel/WidgetCard"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.RightPanel") | ||||
| export default class RightPanel extends React.Component { | ||||
|     static get propTypes() { | ||||
|         return { | ||||
|  |  | |||
|  | @ -34,6 +34,7 @@ import GroupFilterOrderStore from "../../stores/GroupFilterOrderStore"; | |||
| import GroupStore from "../../stores/GroupStore"; | ||||
| import FlairStore from "../../stores/FlairStore"; | ||||
| import CountlyAnalytics from "../../CountlyAnalytics"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const MAX_NAME_LENGTH = 80; | ||||
| const MAX_TOPIC_LENGTH = 800; | ||||
|  | @ -42,6 +43,7 @@ function track(action) { | |||
|     Analytics.trackEvent('RoomDirectory', action); | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.RoomDirectory") | ||||
| export default class RoomDirectory extends React.Component { | ||||
|     static propTypes = { | ||||
|         initialText: PropTypes.string, | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ import AccessibleButton from "../views/elements/AccessibleButton"; | |||
| import { Action } from "../../dispatcher/actions"; | ||||
| import RoomListStore from "../../stores/room-list/RoomListStore"; | ||||
| import { NameFilterCondition } from "../../stores/room-list/filters/NameFilterCondition"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     isMinimized: boolean; | ||||
|  | @ -37,6 +38,7 @@ interface IState { | |||
|     focused: boolean; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.RoomSearch") | ||||
| export default class RoomSearch extends React.PureComponent<IProps, IState> { | ||||
|     private dispatcherRef: string; | ||||
|     private inputRef: React.RefObject<HTMLInputElement> = createRef(); | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ import Resend from '../../Resend'; | |||
| import dis from '../../dispatcher/dispatcher'; | ||||
| import {messageForResourceLimitError, messageForSendError} from '../../utils/ErrorUtils'; | ||||
| import {Action} from "../../dispatcher/actions"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const STATUS_BAR_HIDDEN = 0; | ||||
| const STATUS_BAR_EXPANDED = 1; | ||||
|  | @ -35,6 +36,7 @@ function getUnsentMessages(room) { | |||
|     }); | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.RoomStatusBar") | ||||
| export default class RoomStatusBar extends React.Component { | ||||
|     static propTypes = { | ||||
|         // the room this statusbar is representing.
 | ||||
|  |  | |||
|  | @ -82,6 +82,7 @@ import { Container, WidgetLayoutStore } from "../../stores/widgets/WidgetLayoutS | |||
| import { objectHasDiff } from "../../utils/objects"; | ||||
| import SpaceRoomView from "./SpaceRoomView"; | ||||
| import { IOpts } from "../../createRoom"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const DEBUG = false; | ||||
| let debuglog = function(msg: string) {}; | ||||
|  | @ -195,6 +196,7 @@ export interface IState { | |||
|     dragCounter: number; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.RoomView") | ||||
| export default class RoomView extends React.Component<IProps, IState> { | ||||
|     private readonly dispatcherRef: string; | ||||
|     private readonly roomStoreToken: EventSubscription; | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ import PropTypes from 'prop-types'; | |||
| import { Key } from '../../Keyboard'; | ||||
| import Timer from '../../utils/Timer'; | ||||
| import AutoHideScrollbar from "./AutoHideScrollbar"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const DEBUG_SCROLL = false; | ||||
| 
 | ||||
|  | @ -83,6 +84,7 @@ if (DEBUG_SCROLL) { | |||
|  * offset as normal. | ||||
|  */ | ||||
| 
 | ||||
| @replaceableComponent("structures.ScrollPanel") | ||||
| export default class ScrollPanel extends React.Component { | ||||
|     static propTypes = { | ||||
|         /* stickyBottom: if set to true, then once the user hits the bottom of | ||||
|  |  | |||
|  | @ -22,7 +22,9 @@ import dis from '../../dispatcher/dispatcher'; | |||
| import {throttle} from 'lodash'; | ||||
| import AccessibleButton from '../../components/views/elements/AccessibleButton'; | ||||
| import classNames from 'classnames'; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.SearchBox") | ||||
| export default class SearchBox extends React.Component { | ||||
|     static propTypes = { | ||||
|         onSearch: PropTypes.func, | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ import * as React from "react"; | |||
| import {_t} from '../../languageHandler'; | ||||
| import * as sdk from "../../index"; | ||||
| import AutoHideScrollbar from './AutoHideScrollbar'; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /** | ||||
|  * Represents a tab for the TabbedView. | ||||
|  | @ -45,6 +46,7 @@ interface IState { | |||
|     activeTabIndex: number; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.TabbedView") | ||||
| export default class TabbedView extends React.Component<IProps, IState> { | ||||
|     constructor(props: IProps) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -37,6 +37,7 @@ import EditorStateTransfer from '../../utils/EditorStateTransfer'; | |||
| import {haveTileForEvent} from "../views/rooms/EventTile"; | ||||
| import {UIFeature} from "../../settings/UIFeature"; | ||||
| import {objectHasDiff} from "../../utils/objects"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const PAGINATE_SIZE = 20; | ||||
| const INITIAL_SIZE = 20; | ||||
|  | @ -55,6 +56,7 @@ if (DEBUG) { | |||
|  * | ||||
|  * Also responsible for handling and sending read receipts. | ||||
|  */ | ||||
| @replaceableComponent("structures.TimelinePanel") | ||||
| class TimelinePanel extends React.Component { | ||||
|     static propTypes = { | ||||
|         // The js-sdk EventTimelineSet object for the timeline sequence we are
 | ||||
|  |  | |||
|  | @ -17,12 +17,14 @@ limitations under the License. | |||
| import * as React from "react"; | ||||
| import ToastStore, {IToast} from "../../stores/ToastStore"; | ||||
| import classNames from "classnames"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IState { | ||||
|     toasts: IToast<any>[]; | ||||
|     countSeen: number; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.ToastContainer") | ||||
| export default class ToastContainer extends React.Component<{}, IState> { | ||||
|     constructor(props, context) { | ||||
|         super(props, context); | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ import { Action } from "../../dispatcher/actions"; | |||
| import ProgressBar from "../views/elements/ProgressBar"; | ||||
| import AccessibleButton from "../views/elements/AccessibleButton"; | ||||
| import { IUpload } from "../../models/IUpload"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     room: Room; | ||||
|  | @ -35,6 +36,7 @@ interface IState { | |||
|     uploadsHere: IUpload[]; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.UploadBar") | ||||
| export default class UploadBar extends React.Component<IProps, IState> { | ||||
|     private dispatcherRef: string; | ||||
|     private mounted: boolean; | ||||
|  |  | |||
|  | @ -56,6 +56,7 @@ import HostSignupAction from "./HostSignupAction"; | |||
| import { IHostSignupConfig } from "../views/dialogs/HostSignupDialogTypes"; | ||||
| import SpaceStore, { UPDATE_SELECTED_SPACE } from "../../stores/SpaceStore"; | ||||
| import RoomName from "../views/elements/RoomName"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     isMinimized: boolean; | ||||
|  | @ -69,6 +70,7 @@ interface IState { | |||
|     selectedSpace?: Room; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.UserMenu") | ||||
| export default class UserMenu extends React.Component<IProps, IState> { | ||||
|     private dispatcherRef: string; | ||||
|     private themeWatcherRef: string; | ||||
|  |  | |||
|  | @ -23,7 +23,9 @@ import * as sdk from "../../index"; | |||
| import Modal from '../../Modal'; | ||||
| import { _t } from '../../languageHandler'; | ||||
| import HomePage from "./HomePage"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.UserView") | ||||
| export default class UserView extends React.Component { | ||||
|     static get propTypes() { | ||||
|         return { | ||||
|  |  | |||
|  | @ -21,8 +21,10 @@ import PropTypes from 'prop-types'; | |||
| import SyntaxHighlight from '../views/elements/SyntaxHighlight'; | ||||
| import {_t} from "../../languageHandler"; | ||||
| import * as sdk from "../../index"; | ||||
| import {replaceableComponent} from "../../utils/replaceableComponent"; | ||||
| 
 | ||||
| 
 | ||||
| @replaceableComponent("structures.ViewSource") | ||||
| export default class ViewSource extends React.Component { | ||||
|     static propTypes = { | ||||
|         content: PropTypes.object.isRequired, | ||||
|  |  | |||
|  | @ -26,7 +26,9 @@ import { | |||
|     PHASE_CONFIRM_SKIP, | ||||
| } from '../../../stores/SetupEncryptionStore'; | ||||
| import SetupEncryptionBody from "./SetupEncryptionBody"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.auth.CompleteSecurity") | ||||
| export default class CompleteSecurity extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -19,7 +19,9 @@ import PropTypes from 'prop-types'; | |||
| import AuthPage from '../../views/auth/AuthPage'; | ||||
| import CompleteSecurityBody from '../../views/auth/CompleteSecurityBody'; | ||||
| import CreateCrossSigningDialog from '../../views/dialogs/security/CreateCrossSigningDialog'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("structures.auth.E2eSetup") | ||||
| export default class E2eSetup extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ import classNames from 'classnames'; | |||
| import AuthPage from "../../views/auth/AuthPage"; | ||||
| import CountlyAnalytics from "../../../CountlyAnalytics"; | ||||
| import ServerPicker from "../../views/elements/ServerPicker"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // Phases
 | ||||
| // Show the forgot password inputs
 | ||||
|  | @ -38,6 +39,7 @@ const PHASE_EMAIL_SENT = 3; | |||
| // User has clicked the link in email and completed reset
 | ||||
| const PHASE_DONE = 4; | ||||
| 
 | ||||
| @replaceableComponent("structures.auth.ForgotPassword") | ||||
| export default class ForgotPassword extends React.Component { | ||||
|     static propTypes = { | ||||
|         serverConfig: PropTypes.instanceOf(ValidatedServerConfig).isRequired, | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ import InlineSpinner from "../../views/elements/InlineSpinner"; | |||
| import Spinner from "../../views/elements/Spinner"; | ||||
| import SSOButtons from "../../views/elements/SSOButtons"; | ||||
| import ServerPicker from "../../views/elements/ServerPicker"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // These are used in several places, and come from the js-sdk's autodiscovery
 | ||||
| // stuff. We define them here so that they'll be picked up by i18n.
 | ||||
|  | @ -99,6 +100,7 @@ interface IState { | |||
| /* | ||||
|  * A wire component which glues together login UI components and Login logic | ||||
|  */ | ||||
| @replaceableComponent("structures.auth.LoginComponent") | ||||
| export default class LoginComponent extends React.PureComponent<IProps, IState> { | ||||
|     private unmounted = false; | ||||
|     private loginLogic: Login; | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ import Login, {ISSOFlow} from "../../../Login"; | |||
| import dis from "../../../dispatcher/dispatcher"; | ||||
| import SSOButtons from "../../views/elements/SSOButtons"; | ||||
| import ServerPicker from '../../views/elements/ServerPicker'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     serverConfig: ValidatedServerConfig; | ||||
|  | @ -109,6 +110,7 @@ interface IState { | |||
|     ssoFlow?: ISSOFlow; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.auth.Registration") | ||||
| export default class Registration extends React.Component<IProps, IState> { | ||||
|     loginLogic: Login; | ||||
| 
 | ||||
|  |  | |||
|  | @ -28,6 +28,7 @@ import { | |||
|     PHASE_CONFIRM_SKIP, | ||||
|     PHASE_FINISHED, | ||||
| } from '../../../stores/SetupEncryptionStore'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| function keyHasPassphrase(keyInfo) { | ||||
|     return ( | ||||
|  | @ -37,6 +38,7 @@ function keyHasPassphrase(keyInfo) { | |||
|     ); | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("structures.auth.SetupEncryptionBody") | ||||
| export default class SetupEncryptionBody extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ import {sendLoginRequest} from "../../../Login"; | |||
| import AuthPage from "../../views/auth/AuthPage"; | ||||
| import {SSO_HOMESERVER_URL_KEY, SSO_ID_SERVER_URL_KEY} from "../../../BasePlatform"; | ||||
| import SSOButtons from "../../views/elements/SSOButtons"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const LOGIN_VIEW = { | ||||
|     LOADING: 1, | ||||
|  | @ -41,6 +42,7 @@ const FLOWS_TO_VIEWS = { | |||
|     "m.login.sso": LOGIN_VIEW.SSO, | ||||
| }; | ||||
| 
 | ||||
| @replaceableComponent("structures.auth.SoftLogout") | ||||
| export default class SoftLogout extends React.Component { | ||||
|     static propTypes = { | ||||
|         // Query parameters from MatrixChat
 | ||||
|  |  | |||
|  | @ -15,7 +15,9 @@ limitations under the License. | |||
| */ | ||||
| 
 | ||||
| import React from 'react'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.auth.AuthBody") | ||||
| export default class AuthBody extends React.PureComponent { | ||||
|     render() { | ||||
|         return <div className="mx_AuthBody"> | ||||
|  |  | |||
|  | @ -18,7 +18,9 @@ limitations under the License. | |||
| 
 | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import React from 'react'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.auth.AuthFooter") | ||||
| export default class AuthFooter extends React.Component { | ||||
|     render() { | ||||
|         return ( | ||||
|  |  | |||
|  | @ -18,7 +18,9 @@ limitations under the License. | |||
| import React from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import * as sdk from '../../../index'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.auth.AuthHeader") | ||||
| export default class AuthHeader extends React.Component { | ||||
|     static propTypes = { | ||||
|         disableLanguageSelector: PropTypes.bool, | ||||
|  |  | |||
|  | @ -15,7 +15,9 @@ limitations under the License. | |||
| */ | ||||
| 
 | ||||
| import React from 'react'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.auth.AuthHeaderLogo") | ||||
| export default class AuthHeaderLogo extends React.PureComponent { | ||||
|     render() { | ||||
|         return <div className="mx_AuthHeaderLogo"> | ||||
|  |  | |||
|  | @ -18,12 +18,14 @@ import React, {createRef} from 'react'; | |||
| import PropTypes from 'prop-types'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import CountlyAnalytics from "../../../CountlyAnalytics"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const DIV_ID = 'mx_recaptcha'; | ||||
| 
 | ||||
| /** | ||||
|  * A pure UI component which displays a captcha form. | ||||
|  */ | ||||
| @replaceableComponent("views.auth.CaptchaForm") | ||||
| export default class CaptchaForm extends React.Component { | ||||
|     static propTypes = { | ||||
|         sitePublicKey: PropTypes.string, | ||||
|  |  | |||
|  | @ -15,7 +15,9 @@ limitations under the License. | |||
| */ | ||||
| 
 | ||||
| import React from 'react'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.auth.CompleteSecurityBody") | ||||
| export default class CompleteSecurityBody extends React.PureComponent { | ||||
|     render() { | ||||
|         return <div className="mx_CompleteSecurityBody"> | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ import * as sdk from '../../../index'; | |||
| import {COUNTRIES, getEmojiFlag} from '../../../phonenumber'; | ||||
| import SdkConfig from "../../../SdkConfig"; | ||||
| import { _t } from "../../../languageHandler"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const COUNTRIES_BY_ISO2 = {}; | ||||
| for (const c of COUNTRIES) { | ||||
|  | @ -40,6 +41,7 @@ function countryMatchesSearchQuery(query, country) { | |||
|     return false; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.CountryDropdown") | ||||
| export default class CountryDropdown extends React.Component { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ import SettingsStore from "../../../settings/SettingsStore"; | |||
| import AccessibleButton from "../elements/AccessibleButton"; | ||||
| import Spinner from "../elements/Spinner"; | ||||
| import CountlyAnalytics from "../../../CountlyAnalytics"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* This file contains a collection of components which are used by the | ||||
|  * InteractiveAuth to prompt the user to enter the information needed | ||||
|  | @ -75,6 +76,7 @@ import CountlyAnalytics from "../../../CountlyAnalytics"; | |||
| 
 | ||||
| export const DEFAULT_PHASE = 0; | ||||
| 
 | ||||
| @replaceableComponent("views.auth.PasswordAuthEntry") | ||||
| export class PasswordAuthEntry extends React.Component { | ||||
|     static LOGIN_TYPE = "m.login.password"; | ||||
| 
 | ||||
|  | @ -173,6 +175,7 @@ export class PasswordAuthEntry extends React.Component { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.RecaptchaAuthEntry") | ||||
| export class RecaptchaAuthEntry extends React.Component { | ||||
|     static LOGIN_TYPE = "m.login.recaptcha"; | ||||
| 
 | ||||
|  | @ -235,6 +238,7 @@ export class RecaptchaAuthEntry extends React.Component { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.TermsAuthEntry") | ||||
| export class TermsAuthEntry extends React.Component { | ||||
|     static LOGIN_TYPE = "m.login.terms"; | ||||
| 
 | ||||
|  | @ -385,6 +389,7 @@ export class TermsAuthEntry extends React.Component { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.EmailIdentityAuthEntry") | ||||
| export class EmailIdentityAuthEntry extends React.Component { | ||||
|     static LOGIN_TYPE = "m.login.email.identity"; | ||||
| 
 | ||||
|  | @ -432,6 +437,7 @@ export class EmailIdentityAuthEntry extends React.Component { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.MsisdnAuthEntry") | ||||
| export class MsisdnAuthEntry extends React.Component { | ||||
|     static LOGIN_TYPE = "m.login.msisdn"; | ||||
| 
 | ||||
|  | @ -578,6 +584,7 @@ export class MsisdnAuthEntry extends React.Component { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.SSOAuthEntry") | ||||
| export class SSOAuthEntry extends React.Component { | ||||
|     static propTypes = { | ||||
|         matrixClient: PropTypes.object.isRequired, | ||||
|  | @ -708,6 +715,7 @@ export class SSOAuthEntry extends React.Component { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.FallbackAuthEntry") | ||||
| export class FallbackAuthEntry extends React.Component { | ||||
|     static propTypes = { | ||||
|         matrixClient: PropTypes.object.isRequired, | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ import SdkConfig from "../../../SdkConfig"; | |||
| import withValidation, {IFieldState, IValidationResult} from "../elements/Validation"; | ||||
| import {_t, _td} from "../../../languageHandler"; | ||||
| import Field, {IInputProps} from "../elements/Field"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends Omit<IInputProps, "onValidate"> { | ||||
|     autoFocus?: boolean; | ||||
|  | @ -40,6 +41,7 @@ interface IProps extends Omit<IInputProps, "onValidate"> { | |||
|     onValidate(result: IValidationResult); | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.auth.PassphraseField") | ||||
| class PassphraseField extends PureComponent<IProps> { | ||||
|     static defaultProps = { | ||||
|         label: _td("Password"), | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ import withValidation from "../elements/Validation"; | |||
| import * as Email from "../../../email"; | ||||
| import Field from "../elements/Field"; | ||||
| import CountryDropdown from "./CountryDropdown"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // For validating phone numbers without country codes
 | ||||
| const PHONE_NUMBER_REGEX = /^[0-9()\-\s]*$/; | ||||
|  | @ -66,6 +67,7 @@ enum LoginField { | |||
|  * A pure UI component which displays a username/password form. | ||||
|  * The email/username/phone fields are fully-controlled, the password field is not. | ||||
|  */ | ||||
| @replaceableComponent("views.auth.PasswordLogin") | ||||
| export default class PasswordLogin extends React.PureComponent<IProps, IState> { | ||||
|     static defaultProps = { | ||||
|         onUsernameChanged: function() {}, | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ import PassphraseField from "./PassphraseField"; | |||
| import CountlyAnalytics from "../../../CountlyAnalytics"; | ||||
| import Field from '../elements/Field'; | ||||
| import RegistrationEmailPromptDialog from '../dialogs/RegistrationEmailPromptDialog'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| enum RegistrationField { | ||||
|     Email = "field_email", | ||||
|  | @ -80,6 +81,7 @@ interface IState { | |||
| /* | ||||
|  * A pure UI component which displays a registration form. | ||||
|  */ | ||||
| @replaceableComponent("views.auth.RegistrationForm") | ||||
| export default class RegistrationForm extends React.PureComponent<IProps, IState> { | ||||
|     static defaultProps = { | ||||
|         onValidationChange: console.error, | ||||
|  |  | |||
|  | @ -24,10 +24,12 @@ import {_td} from "../../../languageHandler"; | |||
| import SettingsStore from "../../../settings/SettingsStore"; | ||||
| import {UIFeature} from "../../../settings/UIFeature"; | ||||
| import CountlyAnalytics from "../../../CountlyAnalytics"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // translatable strings for Welcome pages
 | ||||
| _td("Sign in with SSO"); | ||||
| 
 | ||||
| @replaceableComponent("views.auth.Welcome") | ||||
| export default class Welcome extends React.PureComponent { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ import {MatrixClientPeg} from "../../../MatrixClientPeg"; | |||
| import {_t} from "../../../languageHandler"; | ||||
| import TextWithTooltip from "../elements/TextWithTooltip"; | ||||
| import DMRoomMap from "../../../utils/DMRoomMap"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     room: Room; | ||||
|  | @ -68,6 +69,7 @@ function tooltipText(variant: Icon) { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.avatars.DecoratedRoomAvatar") | ||||
| export default class DecoratedRoomAvatar extends React.PureComponent<IProps, IState> { | ||||
|     private _dmUser: User; | ||||
|     private isUnmounted = false; | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ limitations under the License. | |||
| import React from 'react'; | ||||
| import {MatrixClientPeg} from '../../../MatrixClientPeg'; | ||||
| import BaseAvatar from './BaseAvatar'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| export interface IProps { | ||||
|         groupId?: string; | ||||
|  | @ -28,6 +29,7 @@ export interface IProps { | |||
|         onClick?: React.MouseEventHandler; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.avatars.GroupAvatar") | ||||
| export default class GroupAvatar extends React.Component<IProps> { | ||||
|     public static defaultProps = { | ||||
|         width: 36, | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ import dis from "../../../dispatcher/dispatcher"; | |||
| import {Action} from "../../../dispatcher/actions"; | ||||
| import {MatrixClientPeg} from "../../../MatrixClientPeg"; | ||||
| import BaseAvatar from "./BaseAvatar"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends Omit<React.ComponentProps<typeof BaseAvatar>, "name" | "idName" | "url"> { | ||||
|     member: RoomMember; | ||||
|  | @ -42,6 +43,7 @@ interface IState { | |||
|     imageUrl?: string; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.avatars.MemberAvatar") | ||||
| export default class MemberAvatar extends React.Component<IProps, IState> { | ||||
|     public static defaultProps = { | ||||
|         width: 40, | ||||
|  |  | |||
|  | @ -23,7 +23,9 @@ import classNames from 'classnames'; | |||
| import StatusMessageContextMenu from "../context_menus/StatusMessageContextMenu"; | ||||
| import SettingsStore from "../../../settings/SettingsStore"; | ||||
| import {ContextMenu, ContextMenuButton} from "../../structures/ContextMenu"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.avatars.MemberStatusMessageAvatar") | ||||
| export default class MemberStatusMessageAvatar extends React.Component { | ||||
|     static propTypes = { | ||||
|         member: PropTypes.object.isRequired, | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg'; | |||
| import Modal from '../../../Modal'; | ||||
| import * as Avatar from '../../../Avatar'; | ||||
| import {ResizeMethod} from "../../../Avatar"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends Omit<ComponentProps<typeof BaseAvatar>, "name" | "idName" | "url" | "onClick"> { | ||||
|     // Room may be left unset here, but if it is,
 | ||||
|  | @ -42,6 +43,7 @@ interface IState { | |||
|     urls: string[]; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.avatars.RoomAvatar") | ||||
| export default class RoomAvatar extends React.Component<IProps, IState> { | ||||
|     public static defaultProps = { | ||||
|         width: 36, | ||||
|  |  | |||
|  | @ -22,11 +22,13 @@ import { MatrixCall } from 'matrix-js-sdk/src/webrtc/call'; | |||
| import CallHandler from '../../../CallHandler'; | ||||
| import InviteDialog, { KIND_CALL_TRANSFER } from '../dialogs/InviteDialog'; | ||||
| import Modal from '../../../Modal'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends IContextMenuProps { | ||||
|     call: MatrixCall; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.CallContextMenu") | ||||
| export default class CallContextMenu extends React.Component<IProps> { | ||||
|     static propTypes = { | ||||
|         // js-sdk User object. Not required because it might not exist.
 | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ import { _t } from '../../../languageHandler'; | |||
| import { ContextMenu, IProps as IContextMenuProps } from '../../structures/ContextMenu'; | ||||
| import { MatrixCall } from 'matrix-js-sdk/src/webrtc/call'; | ||||
| import Dialpad from '../voip/DialPad'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends IContextMenuProps { | ||||
|     call: MatrixCall; | ||||
|  | @ -28,6 +29,7 @@ interface IState { | |||
|     value: string; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.DialpadContextMenu") | ||||
| export default class DialpadContextMenu extends React.Component<IProps, IState> { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ limitations under the License. | |||
| 
 | ||||
| import React from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * This component can be used to display generic HTML content in a contextual | ||||
|  | @ -23,6 +24,7 @@ import PropTypes from 'prop-types'; | |||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.GenericElementContextMenu") | ||||
| export default class GenericElementContextMenu extends React.Component { | ||||
|     static propTypes = { | ||||
|         element: PropTypes.element.isRequired, | ||||
|  |  | |||
|  | @ -16,7 +16,9 @@ limitations under the License. | |||
| 
 | ||||
| import React from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.GenericTextContextMenu") | ||||
| export default class GenericTextContextMenu extends React.Component { | ||||
|     static propTypes = { | ||||
|         message: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -23,7 +23,9 @@ import Modal from '../../../Modal'; | |||
| import {Group} from 'matrix-js-sdk'; | ||||
| import GroupStore from "../../../stores/GroupStore"; | ||||
| import {MenuItem} from "../../structures/ContextMenu"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.GroupInviteTileContextMenu") | ||||
| export default class GroupInviteTileContextMenu extends React.Component { | ||||
|     static propTypes = { | ||||
|         group: PropTypes.instanceOf(Group).isRequired, | ||||
|  |  | |||
|  | @ -32,11 +32,13 @@ import { isUrlPermitted } from '../../../HtmlUtils'; | |||
| import { isContentActionable } from '../../../utils/EventUtils'; | ||||
| import {MenuItem} from "../../structures/ContextMenu"; | ||||
| import {EventType} from "matrix-js-sdk/src/@types/event"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| function canCancel(eventStatus) { | ||||
|     return eventStatus === EventStatus.QUEUED || eventStatus === EventStatus.NOT_SENT; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.MessageContextMenu") | ||||
| export default class MessageContextMenu extends React.Component { | ||||
|     static propTypes = { | ||||
|         /* the MatrixEvent associated with the context menu */ | ||||
|  |  | |||
|  | @ -20,7 +20,9 @@ import { _t } from '../../../languageHandler'; | |||
| import {MatrixClientPeg} from '../../../MatrixClientPeg'; | ||||
| import * as sdk from '../../../index'; | ||||
| import AccessibleButton from '../elements/AccessibleButton'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.StatusMessageContextMenu") | ||||
| export default class StatusMessageContextMenu extends React.Component { | ||||
|     static propTypes = { | ||||
|         // js-sdk User object. Not required because it might not exist.
 | ||||
|  |  | |||
|  | @ -22,7 +22,9 @@ import dis from '../../../dispatcher/dispatcher'; | |||
| import TagOrderActions from '../../../actions/TagOrderActions'; | ||||
| import {MenuItem} from "../../structures/ContextMenu"; | ||||
| import MatrixClientContext from "../../../contexts/MatrixClientContext"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.context_menus.TagTileContextMenu") | ||||
| export default class TagTileContextMenu extends React.Component { | ||||
|     static propTypes = { | ||||
|         tag: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -33,6 +33,7 @@ import { abbreviateUrl } from '../../../utils/UrlUtils'; | |||
| import {sleep} from "../../../utils/promise"; | ||||
| import {Key} from "../../../Keyboard"; | ||||
| import {Action} from "../../../dispatcher/actions"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const TRUNCATE_QUERY_LIST = 40; | ||||
| const QUERY_USER_DIRECTORY_DEBOUNCE_MS = 200; | ||||
|  | @ -43,7 +44,7 @@ const addressTypeName = { | |||
|     'email': _td("email address"), | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.AddressPickerDialog") | ||||
| export default class AddressPickerDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         title: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -20,7 +20,9 @@ import * as sdk from '../../../index'; | |||
| import { _t } from '../../../languageHandler'; | ||||
| import SettingsStore from "../../../settings/SettingsStore"; | ||||
| import {SettingLevel} from "../../../settings/SettingLevel"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.AskInviteAnywayDialog") | ||||
| export default class AskInviteAnywayDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         unknownProfileUsers: PropTypes.array.isRequired, // [ {userId, errorText}... ]
 | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ import AccessibleButton from '../elements/AccessibleButton'; | |||
| import {MatrixClientPeg} from '../../../MatrixClientPeg'; | ||||
| import { _t } from "../../../languageHandler"; | ||||
| import MatrixClientContext from "../../../contexts/MatrixClientContext"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * Basic container for modal dialogs. | ||||
|  | @ -33,6 +34,7 @@ import MatrixClientContext from "../../../contexts/MatrixClientContext"; | |||
|  * Includes a div for the title, and a keypress handler which cancels the | ||||
|  * dialog on escape. | ||||
|  */ | ||||
| @replaceableComponent("views.dialogs.BaseDialog") | ||||
| export default class BaseDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         // onFinished callback to call when Escape is pressed
 | ||||
|  |  | |||
|  | @ -25,7 +25,9 @@ import Modal from '../../../Modal'; | |||
| import { _t } from '../../../languageHandler'; | ||||
| import sendBugReport, {downloadBugReport} from '../../../rageshake/submit-rageshake'; | ||||
| import AccessibleButton from "../elements/AccessibleButton"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.BugReportDialog") | ||||
| export default class BugReportDialog extends React.Component { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ import {inviteMultipleToRoom, showAnyInviteErrors} from "../../../RoomInvite"; | |||
| import StyledCheckbox from "../elements/StyledCheckbox"; | ||||
| import Modal from "../../../Modal"; | ||||
| import ErrorDialog from "./ErrorDialog"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends IDialogProps { | ||||
|     roomId: string; | ||||
|  | @ -52,6 +53,7 @@ interface IState { | |||
|     busy: boolean; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.CommunityPrototypeInviteDialog") | ||||
| export default class CommunityPrototypeInviteDialog extends React.PureComponent<IProps, IState> { | ||||
|     constructor(props: IProps) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ limitations under the License. | |||
| import React from 'react'; | ||||
| import * as sdk from '../../../index'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * A dialog for confirming a redaction. | ||||
|  | @ -30,6 +31,7 @@ import { _t } from '../../../languageHandler'; | |||
|  * | ||||
|  * To avoid this, we keep the dialog open as long as /redact is in progress. | ||||
|  */ | ||||
| @replaceableComponent("views.dialogs.ConfirmAndWaitRedactDialog") | ||||
| export default class ConfirmAndWaitRedactDialog extends React.PureComponent { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -17,10 +17,12 @@ limitations under the License. | |||
| import React from 'react'; | ||||
| import * as sdk from '../../../index'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * A dialog for confirming a redaction. | ||||
|  */ | ||||
| @replaceableComponent("views.dialogs.ConfirmRedactDialog") | ||||
| export default class ConfirmRedactDialog extends React.Component { | ||||
|     render() { | ||||
|         const TextInputDialog = sdk.getComponent('views.dialogs.TextInputDialog'); | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ import { MatrixClient } from 'matrix-js-sdk'; | |||
| import * as sdk from '../../../index'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import { GroupMemberType } from '../../../groups'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * A dialog for confirming an operation on another user. | ||||
|  | @ -29,6 +30,7 @@ import { GroupMemberType } from '../../../groups'; | |||
|  * to make it obvious what is going to happen. | ||||
|  * Also tweaks the style for 'dangerous' actions (albeit only with colour) | ||||
|  */ | ||||
| @replaceableComponent("views.dialogs.ConfirmUserActionDialog") | ||||
| export default class ConfirmUserActionDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         // matrix-js-sdk (room) member object. Supply either this or 'groupMember'
 | ||||
|  |  | |||
|  | @ -18,7 +18,9 @@ import React from 'react'; | |||
| import PropTypes from 'prop-types'; | ||||
| import {_t} from "../../../languageHandler"; | ||||
| import * as sdk from "../../../index"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ConfirmWipeDeviceDialog") | ||||
| export default class ConfirmWipeDeviceDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ import InfoTooltip from "../elements/InfoTooltip"; | |||
| import dis from "../../../dispatcher/dispatcher"; | ||||
| import {showCommunityRoomInviteDialog} from "../../../RoomInvite"; | ||||
| import GroupStore from "../../../stores/GroupStore"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends IDialogProps { | ||||
| } | ||||
|  | @ -38,6 +39,7 @@ interface IState { | |||
|     avatarPreview: string; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.CreateCommunityPrototypeDialog") | ||||
| export default class CreateCommunityPrototypeDialog extends React.PureComponent<IProps, IState> { | ||||
|     private avatarUploadRef: React.RefObject<HTMLInputElement> = React.createRef(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,9 @@ import * as sdk from '../../../index'; | |||
| import dis from '../../../dispatcher/dispatcher'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {MatrixClientPeg} from '../../../MatrixClientPeg'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.CreateGroupDialog") | ||||
| export default class CreateGroupDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -27,7 +27,9 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg'; | |||
| import {Key} from "../../../Keyboard"; | ||||
| import {privateShouldBeEncrypted} from "../../../createRoom"; | ||||
| import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.CreateRoomDialog") | ||||
| export default class CreateRoomDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -26,7 +26,9 @@ import { _t } from '../../../languageHandler'; | |||
| import InteractiveAuth, {ERROR_USER_CANCELLED} from "../../structures/InteractiveAuth"; | ||||
| import {DEFAULT_PHASE, PasswordAuthEntry, SSOAuthEntry} from "../auth/InteractiveAuthEntryComponents"; | ||||
| import StyledCheckbox from "../elements/StyledCheckbox"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.DeactivateAccountDialog") | ||||
| export default class DeactivateAccountDialog extends React.Component { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|  |  | |||
|  | @ -38,6 +38,7 @@ import {SETTINGS} from "../../../settings/Settings"; | |||
| import SettingsStore, {LEVEL_ORDER} from "../../../settings/SettingsStore"; | ||||
| import Modal from "../../../Modal"; | ||||
| import ErrorDialog from "./ErrorDialog"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| class GenericEditor extends React.PureComponent { | ||||
|     // static propTypes = {onBack: PropTypes.func.isRequired};
 | ||||
|  | @ -1089,6 +1090,7 @@ const Entries = [ | |||
|     SettingsExplorer, | ||||
| ]; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.DevtoolsDialog") | ||||
| export default class DevtoolsDialog extends React.PureComponent { | ||||
|     static propTypes = { | ||||
|         roomId: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ import AccessibleButton from "../elements/AccessibleButton"; | |||
| import { MatrixClientPeg } from "../../../MatrixClientPeg"; | ||||
| import { CommunityPrototypeStore } from "../../../stores/CommunityPrototypeStore"; | ||||
| import FlairStore from "../../../stores/FlairStore"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends IDialogProps { | ||||
|     communityId: string; | ||||
|  | @ -38,6 +39,7 @@ interface IState { | |||
| } | ||||
| 
 | ||||
| // XXX: This is a lot of duplication from the create dialog, just in a different shape
 | ||||
| @replaceableComponent("views.dialogs.EditCommunityPrototypeDialog") | ||||
| export default class EditCommunityPrototypeDialog extends React.PureComponent<IProps, IState> { | ||||
|     private avatarUploadRef: React.RefObject<HTMLInputElement> = React.createRef(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,7 +29,9 @@ import React from 'react'; | |||
| import PropTypes from 'prop-types'; | ||||
| import * as sdk from '../../../index'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ErrorDialog") | ||||
| export default class ErrorDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         title: PropTypes.string, | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ import { | |||
|     IPostmessageResponseData, | ||||
|     PostmessageAction, | ||||
| } from "./HostSignupDialogTypes"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const HOST_SIGNUP_KEY = "host_signup"; | ||||
| 
 | ||||
|  | @ -42,6 +43,7 @@ interface IState { | |||
|     minimized: boolean; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.HostSignupDialog") | ||||
| export default class HostSignupDialog extends React.PureComponent<IProps, IState> { | ||||
|     private iframeRef: React.RefObject<HTMLIFrameElement> = React.createRef(); | ||||
|     private readonly config: IHostSignupConfig; | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ import PropTypes from 'prop-types'; | |||
| import {MatrixClientPeg} from '../../../MatrixClientPeg'; | ||||
| import * as sdk from '../../../index'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const PHASE_START = 0; | ||||
| const PHASE_SHOW_SAS = 1; | ||||
|  | @ -26,6 +27,7 @@ const PHASE_WAIT_FOR_PARTNER_TO_CONFIRM = 2; | |||
| const PHASE_VERIFIED = 3; | ||||
| const PHASE_CANCELLED = 4; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.IncomingSasDialog") | ||||
| export default class IncomingSasDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         verifier: PropTypes.object.isRequired, | ||||
|  |  | |||
|  | @ -20,7 +20,9 @@ import {_t} from "../../../languageHandler"; | |||
| import * as sdk from "../../../index"; | ||||
| import dis from '../../../dispatcher/dispatcher'; | ||||
| import {Action} from "../../../dispatcher/actions"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.IntegrationsDisabledDialog") | ||||
| export default class IntegrationsDisabledDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -19,7 +19,9 @@ import PropTypes from 'prop-types'; | |||
| import {_t} from "../../../languageHandler"; | ||||
| import SdkConfig from "../../../SdkConfig"; | ||||
| import * as sdk from "../../../index"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.IntegrationsImpossibleDialog") | ||||
| export default class IntegrationsImpossibleDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -25,7 +25,9 @@ import { _t } from '../../../languageHandler'; | |||
| import AccessibleButton from '../elements/AccessibleButton'; | ||||
| import {ERROR_USER_CANCELLED} from "../../structures/InteractiveAuth"; | ||||
| import {SSOAuthEntry} from "../auth/InteractiveAuthEntryComponents"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.InteractiveAuthDialog") | ||||
| export default class InteractiveAuthDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         // matrix client to use for UI auth requests
 | ||||
|  |  | |||
|  | @ -42,6 +42,7 @@ import {UIFeature} from "../../../settings/UIFeature"; | |||
| import CountlyAnalytics from "../../../CountlyAnalytics"; | ||||
| import {Room} from "matrix-js-sdk/src/models/room"; | ||||
| import { MatrixCall } from 'matrix-js-sdk/src/webrtc/call'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| // we have a number of types defined from the Matrix spec which can't reasonably be altered here.
 | ||||
| /* eslint-disable camelcase */ | ||||
|  | @ -337,6 +338,7 @@ interface IInviteDialogState { | |||
|     errorText: string, | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.InviteDialog") | ||||
| export default class InviteDialog extends React.PureComponent<IInviteDialogProps, IInviteDialogState> { | ||||
|     static defaultProps = { | ||||
|         kind: KIND_DM, | ||||
|  |  | |||
|  | @ -22,7 +22,9 @@ import dis from '../../../dispatcher/dispatcher'; | |||
| import { _t } from '../../../languageHandler'; | ||||
| import { MatrixClientPeg } from '../../../MatrixClientPeg'; | ||||
| import RestoreKeyBackupDialog from './security/RestoreKeyBackupDialog'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.LogoutDialog") | ||||
| export default class LogoutDialog extends React.Component { | ||||
|     defaultProps = { | ||||
|         onFinished: function() {}, | ||||
|  |  | |||
|  | @ -24,7 +24,9 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg'; | |||
| import * as sdk from '../../../index'; | ||||
| import * as FormattingUtils from '../../../utils/FormattingUtils'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ManualDeviceKeyVerificationDialog") | ||||
| export default class ManualDeviceKeyVerificationDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         userId: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -21,7 +21,9 @@ import { _t } from '../../../languageHandler'; | |||
| import * as sdk from "../../../index"; | ||||
| import {wantsDateSeparator} from '../../../DateUtils'; | ||||
| import SettingsStore from '../../../settings/SettingsStore'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.MessageEditHistoryDialog") | ||||
| export default class MessageEditHistoryDialog extends React.PureComponent { | ||||
|     static propTypes = { | ||||
|         mxEvent: PropTypes.object.isRequired, | ||||
|  |  | |||
|  | @ -38,6 +38,7 @@ import {MatrixClientPeg} from "../../../MatrixClientPeg"; | |||
| import {OwnProfileStore} from "../../../stores/OwnProfileStore"; | ||||
| import { arrayFastClone } from "../../../utils/arrays"; | ||||
| import { ElementWidget } from "../../../stores/widgets/StopGapWidget"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     widgetDefinition: IModalWidgetOpenRequestData; | ||||
|  | @ -53,6 +54,7 @@ interface IState { | |||
| 
 | ||||
| const MAX_BUTTONS = 3; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ModalWidgetDialog") | ||||
| export default class ModalWidgetDialog extends React.PureComponent<IProps, IState> { | ||||
|     private readonly widget: Widget; | ||||
|     private readonly possibleButtons: ModalButtonID[]; | ||||
|  |  | |||
|  | @ -22,10 +22,12 @@ import {MatrixEvent} from "matrix-js-sdk"; | |||
| import {MatrixClientPeg} from "../../../MatrixClientPeg"; | ||||
| import SdkConfig from '../../../SdkConfig'; | ||||
| import Markdown from '../../../Markdown'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| /* | ||||
|  * A dialog for reporting an event. | ||||
|  */ | ||||
| @replaceableComponent("views.dialogs.ReportEventDialog") | ||||
| export default class ReportEventDialog extends PureComponent { | ||||
|     static propTypes = { | ||||
|         mxEvent: PropTypes.instanceOf(MatrixEvent).isRequired, | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ import {MatrixClientPeg} from "../../../MatrixClientPeg"; | |||
| import dis from "../../../dispatcher/dispatcher"; | ||||
| import SettingsStore from "../../../settings/SettingsStore"; | ||||
| import {UIFeature} from "../../../settings/UIFeature"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| export const ROOM_GENERAL_TAB = "ROOM_GENERAL_TAB"; | ||||
| export const ROOM_SECURITY_TAB = "ROOM_SECURITY_TAB"; | ||||
|  | @ -38,6 +39,7 @@ export const ROOM_NOTIFICATIONS_TAB = "ROOM_NOTIFICATIONS_TAB"; | |||
| export const ROOM_BRIDGES_TAB = "ROOM_BRIDGES_TAB"; | ||||
| export const ROOM_ADVANCED_TAB = "ROOM_ADVANCED_TAB"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.RoomSettingsDialog") | ||||
| export default class RoomSettingsDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         roomId: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -20,7 +20,9 @@ import * as sdk from '../../../index'; | |||
| import {MatrixClientPeg} from '../../../MatrixClientPeg'; | ||||
| import Modal from '../../../Modal'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.RoomUpgradeDialog") | ||||
| export default class RoomUpgradeDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         room: PropTypes.object.isRequired, | ||||
|  |  | |||
|  | @ -22,7 +22,9 @@ import * as sdk from "../../../index"; | |||
| import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; | ||||
| import {MatrixClientPeg} from "../../../MatrixClientPeg"; | ||||
| import Modal from "../../../Modal"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.RoomUpgradeWarningDialog") | ||||
| export default class RoomUpgradeWarningDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -28,10 +28,12 @@ import AccessibleButton from "../elements/AccessibleButton"; | |||
| import { UPDATE_EVENT } from "../../../stores/AsyncStore"; | ||||
| import { MatrixClientPeg } from "../../../MatrixClientPeg"; | ||||
| import { IDialogProps } from "./IDialogProps"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps extends IDialogProps { | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ServerOfflineDialog") | ||||
| export default class ServerOfflineDialog extends React.PureComponent<IProps> { | ||||
|     public componentDidMount() { | ||||
|         EchoStore.instance.on(UPDATE_EVENT, this.onEchosUpdated); | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ import Field from "../elements/Field"; | |||
| import StyledRadioButton from "../elements/StyledRadioButton"; | ||||
| import TextWithTooltip from "../elements/TextWithTooltip"; | ||||
| import withValidation, {IFieldState} from "../elements/Validation"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     title?: string; | ||||
|  | @ -38,6 +39,7 @@ interface IState { | |||
|     otherHomeserver: string; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ServerPickerDialog") | ||||
| export default class ServerPickerDialog extends React.PureComponent<IProps, IState> { | ||||
|     private readonly defaultServer: ValidatedServerConfig; | ||||
|     private readonly fieldRef = createRef<Field>(); | ||||
|  |  | |||
|  | @ -22,8 +22,9 @@ import * as sdk from '../../../index'; | |||
| import SdkConfig from '../../../SdkConfig'; | ||||
| import Modal from '../../../Modal'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.SessionRestoreErrorDialog") | ||||
| export default class SessionRestoreErrorDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         error: PropTypes.string.isRequired, | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ import * as Email from '../../../email'; | |||
| import AddThreepid from '../../../AddThreepid'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import Modal from '../../../Modal'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| 
 | ||||
| /* | ||||
|  | @ -29,6 +30,7 @@ import Modal from '../../../Modal'; | |||
|  * | ||||
|  * On success, `onFinished(true)` is called. | ||||
|  */ | ||||
| @replaceableComponent("views.dialogs.SetEmailDialog") | ||||
| export default class SetEmailDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -34,6 +34,7 @@ import AccessibleTooltipButton from '../elements/AccessibleTooltipButton'; | |||
| import { IDialogProps } from "./IDialogProps"; | ||||
| import SettingsStore from "../../../settings/SettingsStore"; | ||||
| import {UIFeature} from "../../../settings/UIFeature"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| const socials = [ | ||||
|     { | ||||
|  | @ -73,6 +74,7 @@ interface IState { | |||
|     permalinkCreator: RoomPermalinkCreator; | ||||
| } | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.ShareDialog") | ||||
| export default class ShareDialog extends React.PureComponent<IProps, IState> { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -20,7 +20,9 @@ import * as sdk from '../../../index'; | |||
| import SdkConfig from '../../../SdkConfig'; | ||||
| import Modal from '../../../Modal'; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.StorageEvictedDialog") | ||||
| export default class StorageEvictedDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|  |  | |||
|  | @ -22,7 +22,9 @@ import * as sdk from '../../../index'; | |||
| import {dialogTermsInteractionCallback, TermsNotSignedError} from "../../../Terms"; | ||||
| import classNames from 'classnames'; | ||||
| import * as ScalarMessaging from "../../../ScalarMessaging"; | ||||
| import {replaceableComponent} from "../../../utils/replaceableComponent"; | ||||
| 
 | ||||
| @replaceableComponent("views.dialogs.TabbedIntegrationManagerDialog") | ||||
| export default class TabbedIntegrationManagerDialog extends React.Component { | ||||
|     static propTypes = { | ||||
|         /** | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	 Travis Ralston
						Travis Ralston