mirror of
https://github.com/zulip/zulip.git
synced 2025-10-30 11:33:51 +00:00
We add live update support for user group events as part of https://github.com/zulip/zulip/issues/19526. This however has a few TODOs: 1. Deciding on how we want to sort the group list on left of #groups overlay. 2. How we highlight the newly created groups after it is added to the list. These will be covered as we add support for more groups events.
207 lines
6.4 KiB
JavaScript
207 lines
6.4 KiB
JavaScript
import $ from "jquery";
|
|
|
|
import * as channel from "./channel";
|
|
import {$t, $t_html} from "./i18n";
|
|
import * as keydown_util from "./keydown_util";
|
|
import * as loading from "./loading";
|
|
import * as ui_report from "./ui_report";
|
|
import * as user_group_create_members from "./user_group_create_members";
|
|
import * as user_group_create_members_data from "./user_group_create_members_data";
|
|
import * as user_groups from "./user_groups";
|
|
import * as user_group_settings_ui from "./user_groups_settings_ui";
|
|
|
|
let created_group_name;
|
|
|
|
export function reset_name() {
|
|
created_group_name = undefined;
|
|
}
|
|
|
|
export function set_name(group_name) {
|
|
created_group_name = group_name;
|
|
}
|
|
|
|
export function get_name() {
|
|
return created_group_name;
|
|
}
|
|
|
|
class UserGroupMembershipError {
|
|
report_no_members_to_user_group() {
|
|
$("#user_group_membership_error").text(
|
|
$t({defaultMessage: "You cannot create a user group with no members!"}),
|
|
);
|
|
$("#user_group_membership_error").show();
|
|
}
|
|
|
|
clear_errors() {
|
|
$("#user_group_membership_error").hide();
|
|
}
|
|
}
|
|
const user_group_membership_error = new UserGroupMembershipError();
|
|
|
|
class UserGroupNameError {
|
|
report_already_exists() {
|
|
$("#user_group_name_error").text(
|
|
$t({defaultMessage: "A user group with this name already exists"}),
|
|
);
|
|
$("#user_group_name_error").show();
|
|
}
|
|
|
|
clear_errors() {
|
|
$("#user_group_name_error").hide();
|
|
}
|
|
|
|
report_empty_user_group() {
|
|
$("#user_group_name_error").text($t({defaultMessage: "A user group needs to have a name"}));
|
|
$("#user_group_name_error").show();
|
|
}
|
|
|
|
select() {
|
|
$("#create_user_group_name").trigger("focus").trigger("select");
|
|
}
|
|
|
|
pre_validate(user_group_name) {
|
|
if (user_group_name && user_groups.get_user_group_from_name(user_group_name)) {
|
|
this.report_already_exists();
|
|
return;
|
|
}
|
|
|
|
this.clear_errors();
|
|
}
|
|
|
|
validate_for_submit(user_group_name) {
|
|
if (!user_group_name) {
|
|
this.report_empty_user_group();
|
|
this.select();
|
|
return false;
|
|
}
|
|
|
|
if (user_groups.get_user_group_from_name(user_group_name)) {
|
|
this.report_already_exists();
|
|
this.select();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
const user_group_name_error = new UserGroupNameError();
|
|
|
|
export function create_user_group_clicked() {
|
|
// this changes the tab switcher (settings/preview) which isn't necessary
|
|
// to a add new stream title.
|
|
user_group_settings_ui.show_user_group_settings_pane.create_user_group();
|
|
$(".group-row.active").removeClass("active");
|
|
|
|
show_new_user_group_modal();
|
|
$("#create_user_group_name").trigger("focus");
|
|
}
|
|
|
|
function clear_error_display() {
|
|
user_group_name_error.clear_errors();
|
|
$(".user_group_create_info").hide();
|
|
user_group_membership_error.clear_errors();
|
|
}
|
|
|
|
export function show_new_user_group_modal() {
|
|
$("#user-group-creation").removeClass("hide");
|
|
$(".right .settings").hide();
|
|
|
|
user_group_create_members.build_widgets();
|
|
|
|
clear_error_display();
|
|
}
|
|
|
|
function create_user_group() {
|
|
const data = {};
|
|
const group_name = $("#create_user_group_name").val().trim();
|
|
const description = $("#create_user_group_description").val().trim();
|
|
set_name(group_name);
|
|
|
|
// Even though we already check to make sure that while typing the user cannot enter
|
|
// newline characters (by pressing the Enter key) it would still be possible to copy
|
|
// and paste over a description with newline characters in it. Prevent that.
|
|
if (description.includes("\n")) {
|
|
ui_report.client_error(
|
|
$t_html({defaultMessage: "The group description cannot contain newline characters."}),
|
|
$(".user_group_create_info"),
|
|
);
|
|
return undefined;
|
|
}
|
|
data.name = group_name;
|
|
data.description = description;
|
|
|
|
const user_ids = user_group_create_members.get_principals();
|
|
data.members = JSON.stringify(user_ids);
|
|
|
|
loading.make_indicator($("#user_group_creating_indicator"), {
|
|
text: $t({defaultMessage: "Creating group..."}),
|
|
});
|
|
|
|
return channel.post({
|
|
url: "/json/user_groups/create",
|
|
data,
|
|
success() {
|
|
$("#create_user_group_name").val("");
|
|
$("#create_user_group_description").val("");
|
|
user_group_create_members.clear_member_list();
|
|
ui_report.success(
|
|
$t_html({defaultMessage: "User group successfully created!"}),
|
|
$(".user_group_create_info"),
|
|
);
|
|
loading.destroy_indicator($("#user_group_creating_indicator"));
|
|
// TODO: The rest of the work should be done via the create event we will get for user group.
|
|
},
|
|
error(xhr) {
|
|
ui_report.error(
|
|
$t_html({defaultMessage: "Error creating user group."}),
|
|
xhr,
|
|
$(".user_group_create_info"),
|
|
);
|
|
reset_name();
|
|
loading.destroy_indicator($("#user_group_creating_indicator"));
|
|
},
|
|
});
|
|
}
|
|
|
|
export function set_up_handlers() {
|
|
const $people_to_add_holder = $("#people_to_add_in_group").expectOne();
|
|
user_group_create_members.create_handlers($people_to_add_holder);
|
|
|
|
const $container = $("#user-group-creation").expectOne();
|
|
|
|
$container.on("click", ".finalize_create_user_group", (e) => {
|
|
e.preventDefault();
|
|
clear_error_display();
|
|
|
|
const group_name = $("#create_user_group_name").val().trim();
|
|
const name_ok = user_group_name_error.validate_for_submit(group_name);
|
|
|
|
if (!name_ok) {
|
|
return;
|
|
}
|
|
|
|
const principals = user_group_create_members_data.get_principals();
|
|
if (principals.length === 0) {
|
|
user_group_membership_error.report_no_members_to_user_group();
|
|
return;
|
|
}
|
|
|
|
create_user_group();
|
|
});
|
|
|
|
$container.on("input", "#create_user_group_name", () => {
|
|
const user_group_name = $("#create_user_group_name").val().trim();
|
|
|
|
// This is an inexpensive check.
|
|
user_group_name_error.pre_validate(user_group_name);
|
|
});
|
|
|
|
// Do not allow the user to enter newline characters while typing out the
|
|
// group's description during it's creation.
|
|
$container.on("keydown", "#create_user_group_description", (e) => {
|
|
if (keydown_util.is_enter_event(e)) {
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
}
|