mirror of
https://github.com/element-hq/element-web
synced 2024-11-28 20:38:55 +03:00
Implement opt-in analytics with cookie bar
This commit is contained in:
parent
6bfd7fca9c
commit
272ba5b004
5 changed files with 118 additions and 6 deletions
|
@ -266,6 +266,7 @@ const LoggedInView = React.createClass({
|
|||
const GroupView = sdk.getComponent('structures.GroupView');
|
||||
const MyGroups = sdk.getComponent('structures.MyGroups');
|
||||
const MatrixToolbar = sdk.getComponent('globals.MatrixToolbar');
|
||||
const CookieBar = sdk.getComponent('globals.CookieBar');
|
||||
const NewVersionBar = sdk.getComponent('globals.NewVersionBar');
|
||||
const UpdateCheckBar = sdk.getComponent('globals.UpdateCheckBar');
|
||||
const PasswordNagBar = sdk.getComponent('globals.PasswordNagBar');
|
||||
|
@ -353,7 +354,9 @@ const LoggedInView = React.createClass({
|
|||
|
||||
let topBar;
|
||||
const isGuest = this.props.matrixClient.isGuest();
|
||||
if (this.props.hasNewVersion) {
|
||||
if (this.props.showCookieBar) {
|
||||
topBar = <CookieBar />;
|
||||
} else if (this.props.hasNewVersion) {
|
||||
topBar = <NewVersionBar version={this.props.version} newVersion={this.props.newVersion}
|
||||
releaseNotes={this.props.newVersionReleaseNotes}
|
||||
/>;
|
||||
|
|
|
@ -165,6 +165,8 @@ export default React.createClass({
|
|||
newVersionReleaseNotes: null,
|
||||
checkingForUpdate: null,
|
||||
|
||||
showCookieBar: false,
|
||||
|
||||
// Parameters used in the registration dance with the IS
|
||||
register_client_secret: null,
|
||||
register_session_id: null,
|
||||
|
@ -227,8 +229,6 @@ export default React.createClass({
|
|||
componentWillMount: function() {
|
||||
SdkConfig.put(this.props.config);
|
||||
|
||||
if (!SettingsStore.getValue("analyticsOptOut")) Analytics.enable();
|
||||
|
||||
// Used by _viewRoom before getting state from sync
|
||||
this.firstSyncComplete = false;
|
||||
this.firstSyncPromise = Promise.defer();
|
||||
|
@ -361,6 +361,16 @@ export default React.createClass({
|
|||
// loadSession as there's logic there to ask the user if they want
|
||||
// to try logging out.
|
||||
});
|
||||
|
||||
if (SettingsStore.getValue("showCookieBar")) {
|
||||
this.setState({
|
||||
showCookieBar: true,
|
||||
});
|
||||
}
|
||||
|
||||
if (SettingsStore.getValue("analyticsOptIn")) {
|
||||
Analytics.enable();
|
||||
}
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
|
@ -673,6 +683,23 @@ export default React.createClass({
|
|||
hideToSRUsers: false,
|
||||
});
|
||||
break;
|
||||
case 'accept_cookies':
|
||||
SettingsStore.setValue("analyticsOptIn", null, SettingLevel.DEVICE, true);
|
||||
SettingsStore.setValue("showCookieBar", null, SettingLevel.DEVICE, false);
|
||||
|
||||
this.setState({
|
||||
showCookieBar: false,
|
||||
});
|
||||
Analytics.enable();
|
||||
break;
|
||||
case 'reject_cookies':
|
||||
SettingsStore.setValue("analyticsOptIn", null, SettingLevel.DEVICE, false);
|
||||
SettingsStore.setValue("showCookieBar", null, SettingLevel.DEVICE, false);
|
||||
|
||||
this.setState({
|
||||
showCookieBar: false,
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1621,6 +1648,7 @@ export default React.createClass({
|
|||
onRegistered={this.onRegistered}
|
||||
currentRoomId={this.state.currentRoomId}
|
||||
teamToken={this._teamToken}
|
||||
showCookieBar={this.state.showCookieBar}
|
||||
{...this.props}
|
||||
{...this.state}
|
||||
/>
|
||||
|
|
73
src/components/views/globals/CookieBar.js
Normal file
73
src/components/views/globals/CookieBar.js
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
Copyright 2018 New Vector Ltd.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import dis from '../../../dispatcher';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import sdk from '../../../index';
|
||||
|
||||
const PrivacyLink = (sub) =>
|
||||
<a
|
||||
className="mx_MatrixToolbar_link"
|
||||
target="_blank"
|
||||
href="https://riot.im/privacy"
|
||||
>
|
||||
{ sub }
|
||||
</a>;
|
||||
|
||||
export default React.createClass({
|
||||
onAccept: function() {
|
||||
dis.dispatch({
|
||||
action: 'accept_cookies',
|
||||
});
|
||||
},
|
||||
|
||||
onReject: function() {
|
||||
dis.dispatch({
|
||||
action: 'reject_cookies',
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
|
||||
const toolbarClasses = "mx_MatrixToolbar";
|
||||
return (
|
||||
<div className={toolbarClasses}>
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="Warning" />
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
{ _t(
|
||||
"Help us improve Riot by sending usage data. " +
|
||||
"This will use a cookie " +
|
||||
"(see our <CookieLink>cookie</CookieLink> and " +
|
||||
"<PrivacyLink>privacy</PrivacyLink> policies)",
|
||||
{},
|
||||
{
|
||||
// XXX: We need to link to the page that explains our cookies
|
||||
'CookieLink': PrivacyLink,
|
||||
'PrivacyLink': PrivacyLink,
|
||||
},
|
||||
) }
|
||||
</div>
|
||||
<AccessibleButton element='button' className="mx_MatrixToolbar_action" onClick={this.onAccept}>
|
||||
{ _t("Send usage data") }
|
||||
</AccessibleButton>
|
||||
<AccessibleButton className="mx_MatrixToolbar_close" onClick={this.onReject}>
|
||||
<img src="img/cancel.svg" width="18" height="18" />
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
|
@ -210,7 +210,8 @@
|
|||
"Mirror local video feed": "Mirror local video feed",
|
||||
"Disable Community Filter Panel": "Disable Community Filter Panel",
|
||||
"Disable Peer-to-Peer for 1:1 calls": "Disable Peer-to-Peer for 1:1 calls",
|
||||
"Opt out of analytics": "Opt out of analytics",
|
||||
"Send analytics data": "Send analytics data",
|
||||
"Show cookie bar": "Show cookie bar",
|
||||
"Never send encrypted messages to unverified devices from this device": "Never send encrypted messages to unverified devices from this device",
|
||||
"Never send encrypted messages to unverified devices in this room from this device": "Never send encrypted messages to unverified devices in this room from this device",
|
||||
"Enable inline URL previews by default": "Enable inline URL previews by default",
|
||||
|
@ -637,6 +638,8 @@
|
|||
"Something went wrong when trying to get your communities.": "Something went wrong when trying to get your communities.",
|
||||
"Display your community flair in rooms configured to show it.": "Display your community flair in rooms configured to show it.",
|
||||
"You're not currently a member of any communities.": "You're not currently a member of any communities.",
|
||||
"Help us improve Riot by sending usage data. This will use a cookie (see our <CookieLink>cookie</CookieLink> and <PrivacyLink>privacy</PrivacyLink> policies)": "Help us improve Riot by sending usage data. This will use a cookie (see our <CookieLink>cookie</CookieLink> and <PrivacyLink>privacy</PrivacyLink> policies)",
|
||||
"Send usage data": "Send usage data",
|
||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||
"Enable them now": "Enable them now",
|
||||
"What's New": "What's New",
|
||||
|
|
|
@ -213,11 +213,16 @@ export const SETTINGS = {
|
|||
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
|
||||
default: "en",
|
||||
},
|
||||
"analyticsOptOut": {
|
||||
"analyticsOptIn": {
|
||||
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
|
||||
displayName: _td('Opt out of analytics'),
|
||||
displayName: _td('Send analytics data'),
|
||||
default: false,
|
||||
},
|
||||
"showCookieBar": {
|
||||
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
|
||||
displayName: _td('Show cookie bar'),
|
||||
default: true,
|
||||
},
|
||||
"autocompleteDelay": {
|
||||
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
|
||||
default: 200,
|
||||
|
|
Loading…
Reference in a new issue