Files
zulip/web/src/add_stream_options_popover.ts
Anders Kaseorg ec3177c834 web: Add explicit extensions to imports.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2024-11-13 09:18:56 -08:00

84 lines
3.6 KiB
TypeScript

import $ from "jquery";
import assert from "minimalistic-assert";
import type * as tippy from "tippy.js";
import render_left_sidebar_stream_setting_popover from "../templates/popovers/left_sidebar/left_sidebar_stream_setting_popover.hbs";
import * as popover_menus from "./popover_menus.ts";
import * as settings_data from "./settings_data.ts";
import {parse_html} from "./ui_util.ts";
export function initialize(): void {
popover_menus.register_popover_menu("#streams_inline_icon", {
theme: "popover-menu",
onShow(instance) {
const can_create_streams =
settings_data.user_can_create_private_streams() ||
settings_data.user_can_create_public_streams() ||
settings_data.user_can_create_web_public_streams();
if (!can_create_streams) {
// If the user can't create streams, we directly
// navigate them to the Stream settings subscribe UI.
window.location.assign("#channels/all");
// Returning false from an onShow handler cancels the show.
return false;
}
// Assuming that the instance can be shown, track and
// prep the instance for showing
popover_menus.popover_instances.stream_settings = instance;
instance.setContent(parse_html(render_left_sidebar_stream_setting_popover()));
popover_menus.on_show_prep(instance);
$("#streams_header").addClass("showing-streams-popover");
// When showing the popover menu, we want the
// "Add channels" and the "Filter channels" tooltip
// to appear below the "Add channels" icon.
const add_streams_tooltip: tippy.ReferenceElement | undefined =
$("#add_streams_tooltip").get(0);
assert(add_streams_tooltip !== undefined);
add_streams_tooltip._tippy?.setProps({
placement: "bottom",
});
const filter_streams_tooltip: (tippy.ReferenceElement & HTMLElement) | undefined =
$("#filter_streams_tooltip").get(0);
// If `filter_streams_tooltip` is not triggered yet, this will set its initial placement.
assert(filter_streams_tooltip !== undefined);
filter_streams_tooltip.dataset.tippyPlacement = "bottom";
filter_streams_tooltip._tippy?.setProps({
placement: "bottom",
});
return undefined;
},
onHidden(instance) {
instance.destroy();
popover_menus.popover_instances.stream_settings = null;
$("#streams_header").removeClass("showing-streams-popover");
// After the popover menu is closed, we want the
// "Add channels" and the "Filter channels" tooltip
// to appear at it's original position that is
// above the "Add channels" icon.
const add_streams_tooltip: tippy.ReferenceElement | undefined =
$("#add_streams_tooltip").get(0);
assert(add_streams_tooltip !== undefined);
add_streams_tooltip._tippy?.setProps({
placement: "top",
});
const filter_streams_tooltip: (tippy.ReferenceElement & HTMLElement) | undefined =
$("#filter_streams_tooltip").get(0);
assert(filter_streams_tooltip !== undefined);
filter_streams_tooltip.dataset.tippyPlacement = "top";
filter_streams_tooltip._tippy?.setProps({
placement: "top",
});
},
});
}