From 36f533f3905459db68a454729c2c88cb7718f5db Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 23 Apr 2025 17:34:52 +0100 Subject: [PATCH] Add telemetry consent dialog --- .../editor-client/locales/en-US/editor.json | 10 +++++ .../@node-red/editor-client/src/js/red.js | 41 ++++++++++++++++--- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json index 5a35135ee..196d032ca 100644 --- a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json @@ -1275,5 +1275,15 @@ "environment": "Environment", "header": "Global Environment Variables", "revert": "Revert" + }, + "telemetry": { + "label": "Telemetry", + "settingsTitle": "Share Anonymous Usage Information", + "settingsDescription": "

Node-RED would like to send anonymous usage data back to the Node-RED team. This information helps us to understand how it is used.

For full information on what information is collected and how it is used, please see the telemetry documentation.

", + "settingsDescription2": "

You can change this setting at any time in the editor settings.

", + "enableLabel": "Yes, send my usage data", + "disableLabel": "No, do not send my usage data", + "updateAvailable": "Update available", + "updateAvailableDesc": "Node-RED __version__ is now available" } } diff --git a/packages/node_modules/@node-red/editor-client/src/js/red.js b/packages/node_modules/@node-red/editor-client/src/js/red.js index f8130a686..d723101e4 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/red.js +++ b/packages/node_modules/@node-red/editor-client/src/js/red.js @@ -672,14 +672,43 @@ var RED = (function() { setTimeout(function() { loader.end(); - checkFirstRun(function() { - if (showProjectWelcome) { - RED.projects.showStartup(); - } - }); + checkTelemetry(function () { + checkFirstRun(function() { + if (showProjectWelcome) { + RED.projects.showStartup(); + } + }); + }) },100); } - + function checkTelemetry(done) { + const telemetrySettings = RED.settings.telemetryEnabled; + // Can only get telemetry permission from a user with permission to modify settings + if (RED.user.hasPermission("settings.write") && telemetrySettings === undefined) { + function completeTelemetry(enable) { + RED.settings.set("telemetryEnabled", enable) + dialog.close() + done() + } + const dialog = RED.popover.dialog({ + title: RED._("telemetry.settingsTitle"), + content: `${RED._("telemetry.settingsDescription")}${RED._("telemetry.settingsDescription2")}`, + closeButton: false, + buttons: [ + { + text: RED._("telemetry.enableLabel"), + click: () => completeTelemetry(true) + }, + { + text: RED._("telemetry.disableLabel"), + click: () => completeTelemetry(false) + } + ] + }) + } else { + done() + } + } function checkFirstRun(done) { if (RED.settings.theme("tours") === false) { done();