Wire up new fields on the ViewRoom posthog event and more interactions (#7787)
This commit is contained in:
parent
9141225a79
commit
cfa6e266cd
10 changed files with 54 additions and 11 deletions
|
@ -91,7 +91,7 @@
|
||||||
"linkifyjs": "^4.0.0-beta.4",
|
"linkifyjs": "^4.0.0-beta.4",
|
||||||
"lodash": "^4.17.20",
|
"lodash": "^4.17.20",
|
||||||
"maplibre-gl": "^1.15.2",
|
"maplibre-gl": "^1.15.2",
|
||||||
"matrix-analytics-events": "github:matrix-org/matrix-analytics-events.git#bdabdd63280f052cedeeb0c25443f3d55f7c7108",
|
"matrix-analytics-events": "github:matrix-org/matrix-analytics-events.git#df9c0312f51911a7364810466d041f2b79e7e080",
|
||||||
"matrix-events-sdk": "^0.0.1-beta.6",
|
"matrix-events-sdk": "^0.0.1-beta.6",
|
||||||
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
||||||
"matrix-widget-api": "^0.1.0-beta.18",
|
"matrix-widget-api": "^0.1.0-beta.18",
|
||||||
|
|
|
@ -190,7 +190,7 @@ const SpaceContextMenu = ({ space, hideHeader, onFinished, ...props }: IProps) =
|
||||||
onFinished();
|
onFinished();
|
||||||
};
|
};
|
||||||
|
|
||||||
const onExploreRoomsClick = (ev: ButtonEvent) => {
|
const openSpace = (ev: ButtonEvent) => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
|
|
||||||
|
@ -202,6 +202,16 @@ const SpaceContextMenu = ({ space, hideHeader, onFinished, ...props }: IProps) =
|
||||||
onFinished();
|
onFinished();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onExploreRoomsClick = (ev: ButtonEvent) => {
|
||||||
|
PosthogTrackers.trackInteraction("WebSpaceContextMenuExploreRoomsItem", ev);
|
||||||
|
openSpace(ev);
|
||||||
|
};
|
||||||
|
|
||||||
|
const onHomeClick = (ev: ButtonEvent) => {
|
||||||
|
PosthogTrackers.trackInteraction("WebSpaceContextMenuHomeItem", ev);
|
||||||
|
openSpace(ev);
|
||||||
|
};
|
||||||
|
|
||||||
return <IconizedContextMenu
|
return <IconizedContextMenu
|
||||||
{...props}
|
{...props}
|
||||||
onFinished={onFinished}
|
onFinished={onFinished}
|
||||||
|
@ -215,7 +225,7 @@ const SpaceContextMenu = ({ space, hideHeader, onFinished, ...props }: IProps) =
|
||||||
<IconizedContextMenuOption
|
<IconizedContextMenuOption
|
||||||
iconClassName="mx_SpacePanel_iconHome"
|
iconClassName="mx_SpacePanel_iconHome"
|
||||||
label={_t("Space home")}
|
label={_t("Space home")}
|
||||||
onClick={onExploreRoomsClick}
|
onClick={onHomeClick}
|
||||||
/>
|
/>
|
||||||
{ inviteOption }
|
{ inviteOption }
|
||||||
<IconizedContextMenuOption
|
<IconizedContextMenuOption
|
||||||
|
|
|
@ -43,7 +43,7 @@ import IconizedContextMenu, {
|
||||||
IconizedContextMenuOption,
|
IconizedContextMenuOption,
|
||||||
IconizedContextMenuOptionList,
|
IconizedContextMenuOptionList,
|
||||||
} from "../context_menus/IconizedContextMenu";
|
} from "../context_menus/IconizedContextMenu";
|
||||||
import AccessibleButton from "../elements/AccessibleButton";
|
import AccessibleButton, { ButtonEvent } from "../elements/AccessibleButton";
|
||||||
import { CommunityPrototypeStore } from "../../../stores/CommunityPrototypeStore";
|
import { CommunityPrototypeStore } from "../../../stores/CommunityPrototypeStore";
|
||||||
import SpaceStore from "../../../stores/spaces/SpaceStore";
|
import SpaceStore from "../../../stores/spaces/SpaceStore";
|
||||||
import {
|
import {
|
||||||
|
@ -223,6 +223,7 @@ const UntaggedAuxButton = ({ tabIndex }: IAuxButtonProps) => {
|
||||||
room_id: activeSpace.roomId,
|
room_id: activeSpace.roomId,
|
||||||
_trigger: undefined, // other
|
_trigger: undefined, // other
|
||||||
});
|
});
|
||||||
|
PosthogTrackers.trackInteraction("WebRoomListRoomsSublistPlusMenuExploreRoomsItem", e);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{
|
{
|
||||||
|
@ -503,13 +504,14 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
|
||||||
defaultDispatcher.dispatch({ action: "view_create_chat", initialText });
|
defaultDispatcher.dispatch({ action: "view_create_chat", initialText });
|
||||||
};
|
};
|
||||||
|
|
||||||
private onExplore = () => {
|
private onExplore = (ev: ButtonEvent) => {
|
||||||
if (!isMetaSpace(this.props.activeSpace)) {
|
if (!isMetaSpace(this.props.activeSpace)) {
|
||||||
defaultDispatcher.dispatch<ViewRoomPayload>({
|
defaultDispatcher.dispatch<ViewRoomPayload>({
|
||||||
action: Action.ViewRoom,
|
action: Action.ViewRoom,
|
||||||
room_id: this.props.activeSpace,
|
room_id: this.props.activeSpace,
|
||||||
_trigger: undefined, // other
|
_trigger: undefined, // other
|
||||||
});
|
});
|
||||||
|
PosthogTrackers.trackInteraction("WebRoomListRoomsSublistPlusMenuExploreRoomsItem", ev);
|
||||||
} else {
|
} else {
|
||||||
const initialText = RoomListStore.instance.getFirstNameFilterCondition()?.search;
|
const initialText = RoomListStore.instance.getFirstNameFilterCondition()?.search;
|
||||||
defaultDispatcher.dispatch({ action: Action.ViewRoomDirectory, initialText });
|
defaultDispatcher.dispatch({ action: Action.ViewRoomDirectory, initialText });
|
||||||
|
|
|
@ -282,6 +282,7 @@ const RoomListHeader = ({ spacePanelDisabled, onVisibilityChange }: IProps) => {
|
||||||
_trigger: undefined, // other
|
_trigger: undefined, // other
|
||||||
});
|
});
|
||||||
closePlusMenu();
|
closePlusMenu();
|
||||||
|
PosthogTrackers.trackInteraction("WebRoomListHeaderPlusMenuExploreRoomsItem", e);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<IconizedContextMenuOption
|
<IconizedContextMenuOption
|
||||||
|
|
|
@ -21,6 +21,7 @@ import { Store } from 'flux/utils';
|
||||||
import { MatrixError } from "matrix-js-sdk/src/http-api";
|
import { MatrixError } from "matrix-js-sdk/src/http-api";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { ViewRoom as ViewRoomEvent } from "matrix-analytics-events/types/typescript/ViewRoom";
|
import { ViewRoom as ViewRoomEvent } from "matrix-analytics-events/types/typescript/ViewRoom";
|
||||||
|
import { JoinRule } from "matrix-js-sdk/src/@types/partials";
|
||||||
|
|
||||||
import dis from '../dispatcher/dispatcher';
|
import dis from '../dispatcher/dispatcher';
|
||||||
import { MatrixClientPeg } from '../MatrixClientPeg';
|
import { MatrixClientPeg } from '../MatrixClientPeg';
|
||||||
|
@ -35,6 +36,9 @@ import CountlyAnalytics, { IJoinRoomEvent } from "../CountlyAnalytics";
|
||||||
import { TimelineRenderingType } from "../contexts/RoomContext";
|
import { TimelineRenderingType } from "../contexts/RoomContext";
|
||||||
import { PosthogAnalytics } from "../PosthogAnalytics";
|
import { PosthogAnalytics } from "../PosthogAnalytics";
|
||||||
import { ViewRoomPayload } from "../dispatcher/payloads/ViewRoomPayload";
|
import { ViewRoomPayload } from "../dispatcher/payloads/ViewRoomPayload";
|
||||||
|
import DMRoomMap from "../utils/DMRoomMap";
|
||||||
|
import SpaceStore from "./spaces/SpaceStore";
|
||||||
|
import { isMetaSpace, MetaSpace } from "./spaces";
|
||||||
|
|
||||||
const NUM_JOIN_RETRY = 5;
|
const NUM_JOIN_RETRY = 5;
|
||||||
|
|
||||||
|
@ -189,10 +193,24 @@ class RoomViewStore extends Store<ActionPayload> {
|
||||||
private async viewRoom(payload: ViewRoomPayload): Promise<void> {
|
private async viewRoom(payload: ViewRoomPayload): Promise<void> {
|
||||||
if (payload.room_id) {
|
if (payload.room_id) {
|
||||||
if (payload._trigger !== null && payload.room_id !== this.state.roomId) {
|
if (payload._trigger !== null && payload.room_id !== this.state.roomId) {
|
||||||
|
let activeSpace: ViewRoomEvent["activeSpace"];
|
||||||
|
if (SpaceStore.instance.activeSpace === MetaSpace.Home) {
|
||||||
|
activeSpace = "Home";
|
||||||
|
} else if (isMetaSpace(SpaceStore.instance.activeSpace)) {
|
||||||
|
activeSpace = "Meta";
|
||||||
|
} else {
|
||||||
|
activeSpace = SpaceStore.instance.activeSpaceRoom.getJoinRule() === JoinRule.Public
|
||||||
|
? "Public"
|
||||||
|
: "Private";
|
||||||
|
}
|
||||||
|
|
||||||
PosthogAnalytics.instance.trackEvent<ViewRoomEvent>({
|
PosthogAnalytics.instance.trackEvent<ViewRoomEvent>({
|
||||||
eventName: "ViewRoom",
|
eventName: "ViewRoom",
|
||||||
trigger: payload._trigger,
|
trigger: payload._trigger,
|
||||||
viaKeyboard: payload._viaKeyboard,
|
viaKeyboard: payload._viaKeyboard,
|
||||||
|
isDM: !!DMRoomMap.shared().getUserIdForRoomId(payload.room_id),
|
||||||
|
isSpace: MatrixClientPeg.get().getRoom(payload.room_id)?.isSpaceRoom(),
|
||||||
|
activeSpace,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import { MatrixEvent } from 'matrix-js-sdk';
|
import { MatrixEvent } from 'matrix-js-sdk';
|
||||||
|
|
||||||
|
import './skinned-sdk'; // Must be first for skinning to work
|
||||||
import { DecryptionFailureTracker } from '../src/DecryptionFailureTracker';
|
import { DecryptionFailureTracker } from '../src/DecryptionFailureTracker';
|
||||||
|
|
||||||
class MockDecryptionError extends Error {
|
class MockDecryptionError extends Error {
|
||||||
|
|
|
@ -17,10 +17,10 @@ limitations under the License.
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { mount } from 'enzyme';
|
import { mount } from 'enzyme';
|
||||||
import { mocked } from 'jest-mock';
|
import { mocked } from 'jest-mock';
|
||||||
import '../../../skinned-sdk';
|
|
||||||
import { act } from "react-dom/test-utils";
|
import { act } from "react-dom/test-utils";
|
||||||
import { Room } from 'matrix-js-sdk';
|
import { Room } from 'matrix-js-sdk';
|
||||||
|
|
||||||
|
import '../../../skinned-sdk';
|
||||||
import ExportDialog from '../../../../src/components/views/dialogs/ExportDialog';
|
import ExportDialog from '../../../../src/components/views/dialogs/ExportDialog';
|
||||||
import { ExportType, ExportFormat } from '../../../../src/utils/exportUtils/exportUtils';
|
import { ExportType, ExportFormat } from '../../../../src/utils/exportUtils/exportUtils';
|
||||||
import { createTestClient, mkStubRoom } from '../../../test-utils';
|
import { createTestClient, mkStubRoom } from '../../../test-utils';
|
||||||
|
|
|
@ -14,13 +14,13 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import '../../../skinned-sdk'; // Must be first for skinning to work
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { act } from "react-dom/test-utils";
|
import { act } from "react-dom/test-utils";
|
||||||
import { sleep } from "matrix-js-sdk/src/utils";
|
import { sleep } from "matrix-js-sdk/src/utils";
|
||||||
import { mount } from 'enzyme';
|
import { mount } from 'enzyme';
|
||||||
import { RelationType } from 'matrix-js-sdk/src/@types/event';
|
import { RelationType } from 'matrix-js-sdk/src/@types/event';
|
||||||
|
|
||||||
|
import '../../../skinned-sdk'; // Must be first for skinning to work
|
||||||
import SendMessageComposer, {
|
import SendMessageComposer, {
|
||||||
createMessageContent,
|
createMessageContent,
|
||||||
isQuickReaction,
|
isQuickReaction,
|
||||||
|
@ -38,8 +38,6 @@ import defaultDispatcher from "../../../../src/dispatcher/dispatcher";
|
||||||
import DocumentOffset from '../../../../src/editor/offset';
|
import DocumentOffset from '../../../../src/editor/offset';
|
||||||
import { Layout } from '../../../../src/settings/enums/Layout';
|
import { Layout } from '../../../../src/settings/enums/Layout';
|
||||||
|
|
||||||
jest.mock("../../../../src/stores/RoomViewStore");
|
|
||||||
|
|
||||||
describe('<SendMessageComposer/>', () => {
|
describe('<SendMessageComposer/>', () => {
|
||||||
const roomContext = {
|
const roomContext = {
|
||||||
roomLoading: true,
|
roomLoading: true,
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import '../skinned-sdk'; // Must be first for skinning to work
|
||||||
import RoomViewStore from '../../src/stores/RoomViewStore';
|
import RoomViewStore from '../../src/stores/RoomViewStore';
|
||||||
import { Action } from '../../src/dispatcher/actions';
|
import { Action } from '../../src/dispatcher/actions';
|
||||||
import { MatrixClientPeg as peg } from '../../src/MatrixClientPeg';
|
import { MatrixClientPeg as peg } from '../../src/MatrixClientPeg';
|
||||||
|
@ -5,6 +6,18 @@ import * as testUtils from '../test-utils';
|
||||||
|
|
||||||
const dispatch = testUtils.getDispatchForStore(RoomViewStore);
|
const dispatch = testUtils.getDispatchForStore(RoomViewStore);
|
||||||
|
|
||||||
|
jest.mock('../../src/utils/DMRoomMap', () => {
|
||||||
|
const mock = {
|
||||||
|
getUserIdForRoomId: jest.fn(),
|
||||||
|
getDMRoomsForUserId: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
shared: jest.fn().mockReturnValue(mock),
|
||||||
|
sharedInstance: mock,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
describe('RoomViewStore', function() {
|
describe('RoomViewStore', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
testUtils.stubClient();
|
testUtils.stubClient();
|
||||||
|
|
|
@ -6249,9 +6249,9 @@ mathml-tag-names@^2.1.3:
|
||||||
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
|
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
|
||||||
integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
|
integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
|
||||||
|
|
||||||
"matrix-analytics-events@github:matrix-org/matrix-analytics-events.git#bdabdd63280f052cedeeb0c25443f3d55f7c7108":
|
"matrix-analytics-events@github:matrix-org/matrix-analytics-events.git#df9c0312f51911a7364810466d041f2b79e7e080":
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://codeload.github.com/matrix-org/matrix-analytics-events/tar.gz/bdabdd63280f052cedeeb0c25443f3d55f7c7108"
|
resolved "https://codeload.github.com/matrix-org/matrix-analytics-events/tar.gz/df9c0312f51911a7364810466d041f2b79e7e080"
|
||||||
|
|
||||||
matrix-events-sdk@^0.0.1-beta.6:
|
matrix-events-sdk@^0.0.1-beta.6:
|
||||||
version "0.0.1-beta.6"
|
version "0.0.1-beta.6"
|
||||||
|
|
Loading…
Reference in a new issue