Merge remote-tracking branch 'origin/dbkr/my_groups' into dbkr/groups_better_groupview

This commit is contained in:
David Baker 2017-07-07 13:44:35 +01:00
commit c1833f9833
8 changed files with 40 additions and 30 deletions

View file

@ -269,6 +269,7 @@ export default React.createClass({
break; break;
case PageTypes.HomePage: case PageTypes.HomePage:
{
// If team server config is present, pass the teamServerURL. props.teamToken // If team server config is present, pass the teamServerURL. props.teamToken
// must also be set for the team page to be displayed, otherwise the // must also be set for the team page to be displayed, otherwise the
// welcomePageUrl is used (which might be undefined). // welcomePageUrl is used (which might be undefined).
@ -280,6 +281,7 @@ export default React.createClass({
teamToken={this.props.teamToken} teamToken={this.props.teamToken}
homePageUrl={this.props.config.welcomePageUrl} homePageUrl={this.props.config.welcomePageUrl}
/>; />;
}
break; break;
case PageTypes.UserView: case PageTypes.UserView:

View file

@ -17,7 +17,7 @@ limitations under the License.
import React from 'react'; import React from 'react';
import sdk from '../../index'; import sdk from '../../index';
import { _t, _tJsx } from '../../languageHandler'; import { _t, _tJsx } from '../../languageHandler';
import WithMatrixClient from '../../wrappers/WithMatrixClient'; import withMatrixClient from '../../wrappers/withMatrixClient';
import AccessibleButton from '../views/elements/AccessibleButton'; import AccessibleButton from '../views/elements/AccessibleButton';
import dis from '../../dispatcher'; import dis from '../../dispatcher';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
@ -40,10 +40,10 @@ const GroupTile = React.createClass({
render: function() { render: function() {
return <a onClick={this.onClick} href="#">{this.props.groupId}</a>; return <a onClick={this.onClick} href="#">{this.props.groupId}</a>;
} },
}); });
export default WithMatrixClient(React.createClass({ export default withMatrixClient(React.createClass({
displayName: 'MyGroups', displayName: 'MyGroups',
propTypes: { propTypes: {
@ -84,12 +84,12 @@ export default WithMatrixClient(React.createClass({
let content; let content;
if (this.state.groups) { if (this.state.groups) {
let groupNodes = []; const groupNodes = [];
this.state.groups.forEach((g) => { this.state.groups.forEach((g) => {
groupNodes.push( groupNodes.push(
<div key={g}> <div key={g}>
<GroupTile groupId={g} /> <GroupTile groupId={g} />
</div> </div>,
); );
}); });
content = <div> content = <div>
@ -117,7 +117,7 @@ export default WithMatrixClient(React.createClass({
{_t( {_t(
'Create a group to represent your community! '+ 'Create a group to represent your community! '+
'Define a set of rooms and your own custom homepage '+ 'Define a set of rooms and your own custom homepage '+
'to mark out your space in the Matrix universe.' 'to mark out your space in the Matrix universe.',
)} )}
</div> </div>
<div className="mx_MyGroups_joinBox"> <div className="mx_MyGroups_joinBox">

View file

@ -38,7 +38,7 @@ export default React.createClass({
}; };
}, },
getGroupAvatarUrl: function(props) { getGroupAvatarUrl: function() {
return MatrixClientPeg.get().mxcUrlToHttp( return MatrixClientPeg.get().mxcUrlToHttp(
this.props.groupAvatarUrl, this.props.groupAvatarUrl,
this.props.width, this.props.width,
@ -50,6 +50,8 @@ export default React.createClass({
render: function() { render: function() {
const BaseAvatar = sdk.getComponent("avatars.BaseAvatar"); const BaseAvatar = sdk.getComponent("avatars.BaseAvatar");
// extract the props we use from props so we can pass any others through // extract the props we use from props so we can pass any others through
// should consider adding this as a global rule in js-sdk?
/*eslint no-unused-vars: ["error", { "ignoreRestSiblings": true }]*/
const {groupId, groupAvatarUrl, ...otherProps} = this.props; const {groupId, groupAvatarUrl, ...otherProps} = this.props;
return ( return (
@ -60,5 +62,5 @@ export default React.createClass({
{...otherProps} {...otherProps}
/> />
); );
} },
}); });

View file

@ -20,7 +20,6 @@ import sdk from '../../../index';
import dis from '../../../dispatcher'; import dis from '../../../dispatcher';
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import MatrixClientPeg from '../../../MatrixClientPeg'; import MatrixClientPeg from '../../../MatrixClientPeg';
import AccessibleButton from '../elements/AccessibleButton';
// We match fairly liberally and leave it up to the server to reject if // We match fairly liberally and leave it up to the server to reject if
// there are invalid characters etc. // there are invalid characters etc.
@ -62,14 +61,17 @@ export default React.createClass({
const parsedGroupId = this._parseGroupId(this.state.groupId); const parsedGroupId = this._parseGroupId(this.state.groupId);
let error = null; let error = null;
if (parsedGroupId === null) { if (parsedGroupId === null) {
error = _t("Group IDs must be of the form +localpart:%(domain)s", {domain: MatrixClientPeg.get().getDomain()}); error = _t(
"Group IDs must be of the form +localpart:%(domain)s",
{domain: MatrixClientPeg.get().getDomain()},
);
} else { } else {
const localpart = parsedGroupId[0];
const domain = parsedGroupId[1]; const domain = parsedGroupId[1];
if (domain !== MatrixClientPeg.get().getDomain()) { if (domain !== MatrixClientPeg.get().getDomain()) {
error = _t( error = _t(
"It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s", "It is currently only possible to create groups on your own home server: "+
{domain: MatrixClientPeg.get().getDomain()} "use a group ID ending with %(domain)s",
{domain: MatrixClientPeg.get().getDomain()},
); );
} }
} }
@ -114,6 +116,9 @@ export default React.createClass({
* Parse a string that may be a group ID * Parse a string that may be a group ID
* If the string is a valid group ID, return a list of [localpart, domain], * If the string is a valid group ID, return a list of [localpart, domain],
* otherwise return null. * otherwise return null.
*
* @param {string} groupId The ID of the group
* @return {string[]} array of localpart, domain
*/ */
_parseGroupId: function(groupId) { _parseGroupId: function(groupId) {
const matches = GROUP_REGEX.exec(this.state.groupId); const matches = GROUP_REGEX.exec(this.state.groupId);

View file

@ -24,7 +24,7 @@ var Modal = require('../../../Modal');
var sdk = require('../../../index'); var sdk = require('../../../index');
var TextForEvent = require('../../../TextForEvent'); var TextForEvent = require('../../../TextForEvent');
import WithMatrixClient from '../../../wrappers/WithMatrixClient'; import withMatrixClient from '../../../wrappers/withMatrixClient';
var ContextualMenu = require('../../structures/ContextualMenu'); var ContextualMenu = require('../../structures/ContextualMenu');
import dis from '../../../dispatcher'; import dis from '../../../dispatcher';
@ -59,7 +59,7 @@ var MAX_READ_AVATARS = 5;
// | '--------------------------------------' | // | '--------------------------------------' |
// '----------------------------------------------------------' // '----------------------------------------------------------'
module.exports = WithMatrixClient(React.createClass({ module.exports = withMatrixClient(React.createClass({
displayName: 'EventTile', displayName: 'EventTile',
propTypes: { propTypes: {

View file

@ -36,12 +36,12 @@ import createRoom from '../../../createRoom';
import DMRoomMap from '../../../utils/DMRoomMap'; import DMRoomMap from '../../../utils/DMRoomMap';
import Unread from '../../../Unread'; import Unread from '../../../Unread';
import { findReadReceiptFromUserId } from '../../../utils/Receipt'; import { findReadReceiptFromUserId } from '../../../utils/Receipt';
import WithMatrixClient from '../../../wrappers/WithMatrixClient'; import withMatrixClient from '../../../wrappers/withMatrixClient';
import AccessibleButton from '../elements/AccessibleButton'; import AccessibleButton from '../elements/AccessibleButton';
import GeminiScrollbar from 'react-gemini-scrollbar'; import GeminiScrollbar from 'react-gemini-scrollbar';
module.exports = WithMatrixClient(React.createClass({ module.exports = withMatrixClient(React.createClass({
displayName: 'MemberInfo', displayName: 'MemberInfo',
propTypes: { propTypes: {

View file

@ -19,10 +19,10 @@ import { _t } from '../../../languageHandler';
import sdk from '../../../index'; import sdk from '../../../index';
import AddThreepid from '../../../AddThreepid'; import AddThreepid from '../../../AddThreepid';
import WithMatrixClient from '../../../wrappers/WithMatrixClient'; import withMatrixClient from '../../../wrappers/withMatrixClient';
import Modal from '../../../Modal'; import Modal from '../../../Modal';
export default WithMatrixClient(React.createClass({ export default withMatrixClient(React.createClass({
displayName: 'AddPhoneNumber', displayName: 'AddPhoneNumber',
propTypes: { propTypes: {

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2015, 2016 OpenMarket Ltd Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -26,7 +27,7 @@ import React from 'react';
*/ */
export default function(WrappedComponent) { export default function(WrappedComponent) {
return React.createClass({ return React.createClass({
displayName: "WithMatrixClient<" + WrappedComponent.displayName + ">", displayName: "withMatrixClient<" + WrappedComponent.displayName + ">",
contextTypes: { contextTypes: {
matrixClient: React.PropTypes.instanceOf(Matrix.MatrixClient).isRequired, matrixClient: React.PropTypes.instanceOf(Matrix.MatrixClient).isRequired,