export: Add banner if admin's private data export setting is disabled.

This commit introduces a banner on the "Start Export" modal
to notify the admin that their personal setting to export
private data is not toggled ON.

The banner is shown when the 'Export type' is 'Standard' and
admin's personal setting to export private data is not toggled ON.

The banner ensures admins are aware their private data will
not be exported unless they enable the respective setting.
This commit is contained in:
Prakhar Pratyush
2024-12-24 16:32:39 +05:30
committed by Tim Abbott
parent 891a35570b
commit 469cc53187
6 changed files with 59 additions and 0 deletions

View File

@@ -764,6 +764,9 @@ export function dispatch_normal_event(event) {
if (event.property === "presence_enabled") {
activity_ui.redraw_user(current_user.user_id);
}
if (event.property === "allow_private_data_export") {
settings_exports.refresh_allow_private_data_export_banner();
}
break;
}

View File

@@ -3,12 +3,14 @@ import type * as tippy from "tippy.js";
import {z} from "zod";
import render_confirm_delete_data_export from "../templates/confirm_dialog/confirm_delete_data_export.hbs";
import render_allow_private_data_export_banner from "../templates/modal_banner/allow_private_data_export_banner.hbs";
import render_admin_export_consent_list from "../templates/settings/admin_export_consent_list.hbs";
import render_admin_export_list from "../templates/settings/admin_export_list.hbs";
import render_start_export_modal from "../templates/start_export_modal.hbs";
import * as channel from "./channel.ts";
import * as components from "./components.ts";
import * as compose_banner from "./compose_banner.ts";
import * as confirm_dialog from "./confirm_dialog.ts";
import * as dialog_widget from "./dialog_widget.ts";
import * as dropdown_widget from "./dropdown_widget.ts";
@@ -23,6 +25,7 @@ import * as settings_config from "./settings_config.ts";
import * as timerender from "./timerender.ts";
import type {HTMLSelectOneElement} from "./types.ts";
import * as ui_report from "./ui_report.ts";
import {user_settings} from "./user_settings.ts";
export const export_consent_schema = z.object({
user_id: z.number(),
@@ -257,6 +260,32 @@ export function populate_export_consents_table(): void {
filter_by_consent_dropdown_widget.setup();
}
function maybe_show_allow_private_data_export_banner(): void {
if (!user_settings.allow_private_data_export) {
const context = {
banner_type: compose_banner.WARNING,
classname: "allow_private_data_export_warning",
hide_close_button: true,
};
$("#allow_private_data_export_banner_container").html(
render_allow_private_data_export_banner(context),
);
}
}
export function refresh_allow_private_data_export_banner(): void {
if (user_settings.allow_private_data_export) {
$(".allow_private_data_export_warning").remove();
} else if ($("#allow_private_data_export_banner_container").length > 0) {
maybe_show_allow_private_data_export_banner();
const $export_type = $<HTMLSelectOneElement>("select:not([multiple])#export_type");
const selected_export_type = Number.parseInt($export_type.val()!, 10);
if (selected_export_type === settings_config.export_type_values.export_public.value) {
$(".allow_private_data_export_warning").hide();
}
}
}
function show_start_export_modal(): void {
const html_body = render_start_export_modal({
export_type_values: settings_config.export_type_values,
@@ -300,6 +329,9 @@ function show_start_export_modal(): void {
{users_consented_for_export_count, total_users_count},
),
);
maybe_show_allow_private_data_export_banner();
const $export_type = $<HTMLSelectOneElement>("select:not([multiple])#export_type");
$export_type.on("change", () => {
const selected_export_type = Number.parseInt($export_type.val()!, 10);
@@ -308,8 +340,10 @@ function show_start_export_modal(): void {
settings_config.export_type_values.export_full_with_consent.value
) {
$("#allow_private_data_export_stats").show();
$(".allow_private_data_export_warning").show();
} else {
$("#allow_private_data_export_stats").hide();
$(".allow_private_data_export_warning").hide();
}
});
}

View File

@@ -0,0 +1,8 @@
{{#> modal_banner . }}
<p class="banner_message">
{{#tr}}
Do you want to <z-link>allow your private data to be exported</z-link>?
{{#*inline "z-link"}}<a href="#settings/account-and-privacy">{{> @partial-block}}</a>{{/inline}}
{{/tr}}
</p>
{{/modal_banner}}

View File

@@ -1,3 +1,4 @@
<p id="allow_private_data_export_banner_container"></p>
<p>
{{#tr}}
A public data export is a complete data export for your organization other than

View File

@@ -1208,6 +1208,12 @@ run_test("user_settings", ({override}) => {
dispatch(event);
assert.equal($("#automatically_offer_update_time_zone").prop("checked"), false);
}
event = event_fixtures.user_settings__allow_private_data_export;
override(user_settings, "allow_private_data_export", false);
override(settings_exports, "refresh_allow_private_data_export_banner", noop);
dispatch(event);
assert_same(user_settings.allow_private_data_export, true);
});
run_test("update_message (read)", ({override}) => {

View File

@@ -883,6 +883,13 @@ exports.fixtures = {
},
},
user_settings__allow_private_data_export: {
type: "user_settings",
op: "update",
property: "allow_private_data_export",
value: true,
},
user_settings__color_scheme_automatic: {
type: "user_settings",
op: "update",