Convert AppPermission to TS
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
parent
48949af961
commit
1fc5138cfe
1 changed files with 37 additions and 29 deletions
|
@ -17,7 +17,6 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
import * as sdk from '../../../index';
|
import * as sdk from '../../../index';
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
|
@ -25,22 +24,29 @@ import SdkConfig from '../../../SdkConfig';
|
||||||
import WidgetUtils from "../../../utils/WidgetUtils";
|
import WidgetUtils from "../../../utils/WidgetUtils";
|
||||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||||
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
||||||
|
import { RoomMember } from 'matrix-js-sdk/src/models/room-member';
|
||||||
|
|
||||||
|
interface IProps {
|
||||||
|
url: string;
|
||||||
|
creatorUserId: string;
|
||||||
|
roomId: string;
|
||||||
|
onPermissionGranted: () => void;
|
||||||
|
isRoomEncrypted?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IState {
|
||||||
|
roomMember: RoomMember;
|
||||||
|
isWrapped: boolean;
|
||||||
|
widgetDomain: string;
|
||||||
|
}
|
||||||
|
|
||||||
@replaceableComponent("views.elements.AppPermission")
|
@replaceableComponent("views.elements.AppPermission")
|
||||||
export default class AppPermission extends React.Component {
|
export default class AppPermission extends React.Component<IProps, IState> {
|
||||||
static propTypes = {
|
static defaultProps: Partial<IProps> = {
|
||||||
url: PropTypes.string.isRequired,
|
|
||||||
creatorUserId: PropTypes.string.isRequired,
|
|
||||||
roomId: PropTypes.string.isRequired,
|
|
||||||
onPermissionGranted: PropTypes.func.isRequired,
|
|
||||||
isRoomEncrypted: PropTypes.bool,
|
|
||||||
};
|
|
||||||
|
|
||||||
static defaultProps = {
|
|
||||||
onPermissionGranted: () => {},
|
onPermissionGranted: () => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props: IProps) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
// The first step is to pick apart the widget so we can render information about it
|
// The first step is to pick apart the widget so we can render information about it
|
||||||
|
@ -55,16 +61,18 @@ export default class AppPermission extends React.Component {
|
||||||
this.state = {
|
this.state = {
|
||||||
...urlInfo,
|
...urlInfo,
|
||||||
roomMember,
|
roomMember,
|
||||||
|
isWrapped: null,
|
||||||
|
widgetDomain: null,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
parseWidgetUrl() {
|
private parseWidgetUrl(): { isWrapped: boolean, widgetDomain: string } {
|
||||||
const widgetUrl = url.parse(this.props.url);
|
const widgetUrl = url.parse(this.props.url);
|
||||||
const params = new URLSearchParams(widgetUrl.search);
|
const params = new URLSearchParams(widgetUrl.search);
|
||||||
|
|
||||||
// HACK: We're relying on the query params when we should be relying on the widget's `data`.
|
// HACK: We're relying on the query params when we should be relying on the widget's `data`.
|
||||||
// This is a workaround for Scalar.
|
// This is a workaround for Scalar.
|
||||||
if (WidgetUtils.isScalarUrl(widgetUrl) && params && params.get('url')) {
|
if (WidgetUtils.isScalarUrl(this.props.url) && params && params.get('url')) {
|
||||||
const unwrappedUrl = url.parse(params.get('url'));
|
const unwrappedUrl = url.parse(params.get('url'));
|
||||||
return {
|
return {
|
||||||
widgetDomain: unwrappedUrl.host || unwrappedUrl.hostname,
|
widgetDomain: unwrappedUrl.host || unwrappedUrl.hostname,
|
Loading…
Reference in a new issue