Files
zulip/static/js/settings_exports.js
Anders Kaseorg 6ec808b8df js: Add "use strict" directive to CommonJS files.
ES and TypeScript modules are strict by default and don’t need this
directive.  ESLint will remind us to add it to new CommonJS files and
remove it from ES and TypeScript modules.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-07-31 22:09:46 -07:00

137 lines
4.0 KiB
JavaScript

"use strict";
const XDate = require("xdate");
const render_admin_export_list = require("../templates/admin_export_list.hbs");
const meta = {
loaded: false,
};
exports.reset = function () {
meta.loaded = false;
};
function sort_user(a, b) {
const a_name = people.get_full_name(a.acting_user_id).toLowerCase();
const b_name = people.get_full_name(b.acting_user_id).toLowerCase();
if (a_name > b_name) {
return 1;
} else if (a_name === b_name) {
return 0;
}
return -1;
}
exports.populate_exports_table = function (exports) {
if (!meta.loaded) {
return;
}
const exports_table = $("#admin_exports_table").expectOne();
list_render.create(exports_table, Object.values(exports), {
name: "admin_exports_list",
modifier(data) {
let failed_timestamp = data.failed_timestamp;
let deleted_timestamp = data.deleted_timestamp;
if (failed_timestamp !== null) {
failed_timestamp = timerender.last_seen_status_from_date(
new XDate(failed_timestamp * 1000),
);
}
if (deleted_timestamp !== null) {
deleted_timestamp = timerender.last_seen_status_from_date(
new XDate(deleted_timestamp * 1000),
);
}
return render_admin_export_list({
realm_export: {
id: data.id,
acting_user: people.get_full_name(data.acting_user_id),
// Convert seconds -> milliseconds
event_time: timerender.last_seen_status_from_date(
new XDate(data.export_time * 1000),
),
url: data.export_url,
time_failed: failed_timestamp,
pending: data.pending,
time_deleted: deleted_timestamp,
},
});
},
filter: {
element: exports_table.closest(".settings-section").find(".search"),
predicate(item, value) {
return people.get_full_name(item.acting_user_id).toLowerCase().includes(value);
},
onupdate() {
ui.reset_scrollbar(exports_table);
},
},
parent_container: $("#data-exports").expectOne(),
init_sort: [sort_user],
sort_fields: {
user: sort_user,
},
simplebar_container: $("#data-exports .progressive-table-wrapper"),
});
const spinner = $(".export_row .export_url_spinner");
if (spinner.length) {
loading.make_indicator(spinner);
} else {
loading.destroy_indicator(spinner);
}
};
exports.set_up = function () {
meta.loaded = true;
$("#export-data").on("click", (e) => {
e.preventDefault();
e.stopPropagation();
const export_status = $("#export_status");
channel.post({
url: "/json/export/realm",
success() {
ui_report.success(
i18n.t("Export started. Check back in a few minutes."),
export_status,
4000,
);
},
error(xhr) {
ui_report.error(i18n.t("Export failed"), xhr, export_status);
},
});
});
// Do an initial population of the table
channel.get({
url: "/json/export/realm",
success(data) {
exports.populate_exports_table(data.exports);
},
});
$(".admin_exports_table").on("click", ".delete", function (e) {
e.preventDefault();
e.stopPropagation();
const btn = $(this);
channel.del({
url: "/json/export/realm/" + encodeURIComponent(btn.attr("data-export-id")),
error(xhr) {
ui_report.generic_row_button_error(xhr, btn);
},
// No success function, since UI updates are done via server_events
});
});
};
window.settings_exports = exports;