mirror of https://github.com/zulip/zulip.git
197 lines
6.1 KiB
JavaScript
197 lines
6.1 KiB
JavaScript
import $ from "jquery";
|
|
|
|
import render_browse_user_groups_list_item from "../templates/user_group_settings/browse_user_groups_list_item.hbs";
|
|
import render_user_group_settings_overlay from "../templates/user_group_settings/user_group_settings_overlay.hbs";
|
|
|
|
import * as blueslip from "./blueslip";
|
|
import * as browser_history from "./browser_history";
|
|
import {$t} from "./i18n";
|
|
import * as ListWidget from "./list_widget";
|
|
import * as overlays from "./overlays";
|
|
import * as people from "./people";
|
|
import * as scroll_util from "./scroll_util";
|
|
import * as settings_data from "./settings_data";
|
|
import * as ui from "./ui";
|
|
import * as user_group_create from "./user_group_create";
|
|
import * as user_groups from "./user_groups";
|
|
|
|
export function set_up_click_handlers() {
|
|
$("#groups_overlay").on("click", ".left #clear_search_group_name", (e) => {
|
|
const $input = $("#groups_overlay .left #search_group_name");
|
|
$input.val("");
|
|
|
|
// This is a hack to rerender complete
|
|
// stream list once the text is cleared.
|
|
$input.trigger("input");
|
|
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
});
|
|
}
|
|
|
|
export const show_user_group_settings_pane = {
|
|
nothing_selected() {
|
|
$(".settings, #user-group-creation").hide();
|
|
$(".nothing-selected").show();
|
|
$("#groups_overlay .user-group-info-title").text(
|
|
$t({defaultMessage: "User group settings"}),
|
|
);
|
|
},
|
|
settings(group) {
|
|
$(".settings, #user-group-creation").hide();
|
|
$("#groups_overlay .settings").show();
|
|
$("#groups_overlay .user-group-info-title").text(group.name);
|
|
},
|
|
create_user_group() {
|
|
$(".nothing-selected, .settings, #user-group-creation").hide();
|
|
$("#user-group-creation").show();
|
|
$("#groups_overlay .user-group-info-title").text($t({defaultMessage: "Create user group"}));
|
|
},
|
|
};
|
|
|
|
export function do_open_create_user_group() {
|
|
user_group_create.create_user_group_clicked();
|
|
}
|
|
|
|
export function open_create_user_group() {
|
|
do_open_create_user_group();
|
|
browser_history.update("#groups/new");
|
|
}
|
|
|
|
export function row_for_group_id(group_id) {
|
|
return $(`.group-row[data-group-id='${CSS.escape(group_id)}']`);
|
|
}
|
|
|
|
export function get_active_data() {
|
|
const $active_row = $("div.group-row.active");
|
|
const valid_active_id = Number.parseInt($active_row.attr("data-group-id"), 10);
|
|
const $active_tabs = $(".user-groups-container").find("div.ind-tab.selected");
|
|
return {
|
|
$row: $active_row,
|
|
id: valid_active_id,
|
|
$tabs: $active_tabs,
|
|
};
|
|
}
|
|
|
|
export function switch_to_group_row(group_id) {
|
|
const $group_row = row_for_group_id(group_id);
|
|
const $container = $(".user-groups-list");
|
|
|
|
get_active_data().$row.removeClass("active");
|
|
$group_row.addClass("active");
|
|
|
|
scroll_util.scroll_element_into_container($group_row, $container);
|
|
|
|
// It's dubious that this timeout is needed.
|
|
setTimeout(() => {
|
|
if (group_id === get_active_data().id) {
|
|
$group_row.trigger("click");
|
|
}
|
|
}, 100);
|
|
}
|
|
|
|
function show_right_section() {
|
|
$(".right").addClass("show");
|
|
$(".user-groups-header").addClass("slide-left");
|
|
}
|
|
|
|
export function change_state(section) {
|
|
if (!section) {
|
|
show_user_group_settings_pane.nothing_selected();
|
|
return;
|
|
}
|
|
if (section === "new") {
|
|
do_open_create_user_group();
|
|
return;
|
|
}
|
|
|
|
// if the section is a valid number.
|
|
if (/\d+/.test(section)) {
|
|
const group_id = Number.parseInt(section, 10);
|
|
show_right_section();
|
|
switch_to_group_row(group_id);
|
|
return;
|
|
}
|
|
|
|
blueslip.warn("invalid section for groups: " + section);
|
|
show_user_group_settings_pane.nothing_selected();
|
|
}
|
|
|
|
export function setup_page(callback) {
|
|
function populate_and_fill() {
|
|
const template_data = {
|
|
can_create_or_edit_user_groups: settings_data.user_can_edit_user_groups(),
|
|
};
|
|
|
|
const rendered = render_user_group_settings_overlay(template_data);
|
|
|
|
const $manage_groups_container = ui.get_content_element($("#manage_groups_container"));
|
|
$manage_groups_container.empty();
|
|
$manage_groups_container.append(rendered);
|
|
|
|
const $container = $("#manage_groups_container .user-groups-list");
|
|
const user_groups_list = user_groups.get_realm_user_groups();
|
|
|
|
ListWidget.create($container, user_groups_list, {
|
|
name: "user-groups-overlay",
|
|
modifier(item) {
|
|
item.is_member = user_groups.is_direct_member_of(
|
|
people.my_current_user_id(),
|
|
item.id,
|
|
);
|
|
return render_browse_user_groups_list_item(item);
|
|
},
|
|
filter: {
|
|
$element: $("#manage_groups_container .left #search_group_name"),
|
|
predicate(item, value) {
|
|
return (
|
|
item &&
|
|
(item.name.toLocaleLowerCase().includes(value) ||
|
|
item.description.toLocaleLowerCase().includes(value))
|
|
);
|
|
},
|
|
},
|
|
$simplebar_container: $container,
|
|
});
|
|
|
|
set_up_click_handlers();
|
|
user_group_create.set_up_handlers();
|
|
|
|
// show the "User group settings" header by default.
|
|
$(".display-type #user_group_settings_title").show();
|
|
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
}
|
|
|
|
populate_and_fill();
|
|
}
|
|
|
|
export function initialize() {
|
|
$("#manage_groups_container").on("click", ".create_user_group_button", (e) => {
|
|
e.preventDefault();
|
|
open_create_user_group();
|
|
});
|
|
}
|
|
|
|
export function launch(section) {
|
|
setup_page(() => {
|
|
overlays.open_overlay({
|
|
name: "group_subscriptions",
|
|
$overlay: $("#groups_overlay"),
|
|
on_close() {
|
|
browser_history.exit_overlay();
|
|
},
|
|
});
|
|
change_state(section);
|
|
});
|
|
if (!get_active_data().id) {
|
|
if (section === "new") {
|
|
$("#create_user_group_name").trigger("focus");
|
|
} else {
|
|
$("#search_group_name").trigger("focus");
|
|
}
|
|
}
|
|
}
|