mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import $ from "jquery";
 | 
						|
import {z} from "zod";
 | 
						|
 | 
						|
import render_settings_deactivation_bot_modal from "../templates/confirm_dialog/confirm_deactivate_bot.hbs";
 | 
						|
import render_settings_deactivation_user_modal from "../templates/confirm_dialog/confirm_deactivate_user.hbs";
 | 
						|
import render_settings_reactivation_bot_modal from "../templates/confirm_dialog/confirm_reactivate_bot.hbs";
 | 
						|
import render_settings_reactivation_user_modal from "../templates/confirm_dialog/confirm_reactivate_user.hbs";
 | 
						|
 | 
						|
import * as bot_data from "./bot_data";
 | 
						|
import * as channel from "./channel";
 | 
						|
import * as confirm_dialog from "./confirm_dialog";
 | 
						|
import * as dialog_widget from "./dialog_widget";
 | 
						|
import {$t_html} from "./i18n";
 | 
						|
import {page_params} from "./page_params";
 | 
						|
import * as people from "./people";
 | 
						|
import {invite_schema} from "./settings_invites";
 | 
						|
 | 
						|
export function confirm_deactivation(
 | 
						|
    user_id: number,
 | 
						|
    handle_confirm: () => void,
 | 
						|
    loading_spinner: boolean,
 | 
						|
): void {
 | 
						|
    // Knowing the number of invites requires making this request. If the request fails,
 | 
						|
    // we won't have the accurate number of invites. So, we don't show the modal if the
 | 
						|
    // request fails.
 | 
						|
    void channel.get({
 | 
						|
        url: "/json/invites",
 | 
						|
        timeout: 10 * 1000,
 | 
						|
        success(raw_data) {
 | 
						|
            const data = z.object({invites: z.array(invite_schema)}).parse(raw_data);
 | 
						|
 | 
						|
            let number_of_invites_by_user = 0;
 | 
						|
            for (const invite of data.invites) {
 | 
						|
                if (invite.invited_by_user_id === user_id) {
 | 
						|
                    number_of_invites_by_user = number_of_invites_by_user + 1;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            const bots_owned_by_user = bot_data.get_all_bots_owned_by_user(user_id);
 | 
						|
            const user = people.get_by_user_id(user_id);
 | 
						|
            const realm_url = page_params.realm_uri;
 | 
						|
            const realm_name = page_params.realm_name;
 | 
						|
            const opts = {
 | 
						|
                username: user.full_name,
 | 
						|
                email: user.delivery_email,
 | 
						|
                bots_owned_by_user,
 | 
						|
                number_of_invites_by_user,
 | 
						|
                admin_email: people.my_current_email(),
 | 
						|
                realm_url,
 | 
						|
                realm_name,
 | 
						|
            };
 | 
						|
            const html_body = render_settings_deactivation_user_modal(opts);
 | 
						|
 | 
						|
            function set_email_field_visibility(): void {
 | 
						|
                const $send_email_checkbox = $("#dialog_widget_modal").find(".send_email");
 | 
						|
                const $email_field = $("#dialog_widget_modal").find(".email_field");
 | 
						|
 | 
						|
                $email_field.hide();
 | 
						|
                $send_email_checkbox.on("change", () => {
 | 
						|
                    if ($send_email_checkbox.is(":checked")) {
 | 
						|
                        $email_field.show();
 | 
						|
                    } else {
 | 
						|
                        $email_field.hide();
 | 
						|
                    }
 | 
						|
                });
 | 
						|
            }
 | 
						|
 | 
						|
            dialog_widget.launch({
 | 
						|
                html_heading: $t_html(
 | 
						|
                    {defaultMessage: "Deactivate {name}?"},
 | 
						|
                    {name: user.full_name},
 | 
						|
                ),
 | 
						|
                help_link: "/help/deactivate-or-reactivate-a-user#deactivating-a-user",
 | 
						|
                html_body,
 | 
						|
                html_submit_button: $t_html({defaultMessage: "Deactivate"}),
 | 
						|
                id: "deactivate-user-modal",
 | 
						|
                on_click: handle_confirm,
 | 
						|
                post_render: set_email_field_visibility,
 | 
						|
                loading_spinner,
 | 
						|
            });
 | 
						|
        },
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
export function confirm_bot_deactivation(
 | 
						|
    bot_id: number,
 | 
						|
    handle_confirm: () => void,
 | 
						|
    loading_spinner: boolean,
 | 
						|
): void {
 | 
						|
    const bot = people.get_by_user_id(bot_id);
 | 
						|
    const html_body = render_settings_deactivation_bot_modal();
 | 
						|
 | 
						|
    dialog_widget.launch({
 | 
						|
        html_heading: $t_html({defaultMessage: "Deactivate {name}?"}, {name: bot.full_name}),
 | 
						|
        help_link: "/help/deactivate-or-reactivate-a-bot",
 | 
						|
        html_body,
 | 
						|
        html_submit_button: $t_html({defaultMessage: "Deactivate"}),
 | 
						|
        on_click: handle_confirm,
 | 
						|
        loading_spinner,
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
export function confirm_reactivation(
 | 
						|
    user_id: number,
 | 
						|
    handle_confirm: () => void,
 | 
						|
    loading_spinner: boolean,
 | 
						|
): void {
 | 
						|
    const user = people.get_by_user_id(user_id);
 | 
						|
    const opts: {
 | 
						|
        username: string;
 | 
						|
        original_owner_deactivated?: boolean;
 | 
						|
        owner_name?: string;
 | 
						|
    } = {
 | 
						|
        username: user.full_name,
 | 
						|
    };
 | 
						|
 | 
						|
    let html_body;
 | 
						|
    // check if bot or human
 | 
						|
    if (user.is_bot) {
 | 
						|
        if (user.bot_owner_id !== null && !people.is_person_active(user.bot_owner_id)) {
 | 
						|
            opts.original_owner_deactivated = true;
 | 
						|
            opts.owner_name = people.get_by_user_id(user.bot_owner_id).full_name;
 | 
						|
        } else {
 | 
						|
            opts.original_owner_deactivated = false;
 | 
						|
        }
 | 
						|
        html_body = render_settings_reactivation_bot_modal(opts);
 | 
						|
    } else {
 | 
						|
        html_body = render_settings_reactivation_user_modal(opts);
 | 
						|
    }
 | 
						|
 | 
						|
    confirm_dialog.launch({
 | 
						|
        html_heading: $t_html({defaultMessage: "Reactivate {name}"}, {name: user.full_name}),
 | 
						|
        help_link: "/help/deactivate-or-reactivate-a-user#reactivating-a-user",
 | 
						|
        html_body,
 | 
						|
        on_click: handle_confirm,
 | 
						|
        loading_spinner,
 | 
						|
    });
 | 
						|
}
 |