mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	personal_settings: Add deactivate organization button for organization.
Added a 'Deactivate Organization' button inside the 'Personal Settings > Account & Privacy'. This button only appears when the organization owner is the only user present. To verify this, I used the 'get_active_human_count' function from the 'people.js'. To remove duplication, a function has been created inside settings_org file to handle the click event for the two buttons present inside personal_settings and organization_settings that perform the same action of deactivating organization. The click handler is defined in the click_handlers.js file, which calls the dialog for deactivating the organization. Previously, the error used to appear at the top of the organization_settings, but now it appears inside the dialog box itself. To remove the duplication of two buttons having the same IDs,changed the Id `deactivate_realm_button` to a className. Fixes: #24105
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							c9f4e474a7
						
					
				
				
					commit
					d8adc6de1c
				
			@@ -108,6 +108,7 @@ export function build_page() {
 | 
			
		||||
        }),
 | 
			
		||||
        user_is_only_organization_owner: people.is_current_user_only_owner(),
 | 
			
		||||
        email_address_visibility_values: settings_config.email_address_visibility_values,
 | 
			
		||||
        owner_is_only_user_in_organization: people.get_active_human_count() === 1,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $(".settings-box").html(rendered_settings_tab);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ import * as people from "./people";
 | 
			
		||||
import * as pill_typeahead from "./pill_typeahead";
 | 
			
		||||
import * as settings_bots from "./settings_bots";
 | 
			
		||||
import * as settings_data from "./settings_data";
 | 
			
		||||
import * as settings_org from "./settings_org";
 | 
			
		||||
import * as settings_ui from "./settings_ui";
 | 
			
		||||
import * as typeahead_helper from "./typeahead_helper";
 | 
			
		||||
import * as ui_report from "./ui_report";
 | 
			
		||||
@@ -764,6 +765,10 @@ export function set_up() {
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $("#account-settings .deactivate_realm_button").on(
 | 
			
		||||
        "click",
 | 
			
		||||
        settings_org.deactivate_organization,
 | 
			
		||||
    );
 | 
			
		||||
    $("#user_deactivate_account_button").on("click", (e) => {
 | 
			
		||||
        // This click event must not get propagated to parent container otherwise the modal
 | 
			
		||||
        // will not show up because of a call to `close_active_modal` in `settings.js`.
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ import render_settings_admin_auth_methods_list from "../templates/settings/admin
 | 
			
		||||
 | 
			
		||||
import * as blueslip from "./blueslip";
 | 
			
		||||
import * as channel from "./channel";
 | 
			
		||||
import * as confirm_dialog from "./confirm_dialog";
 | 
			
		||||
import {csrf_token} from "./csrf";
 | 
			
		||||
import * as dialog_widget from "./dialog_widget";
 | 
			
		||||
import {DropdownListWidget} from "./dropdown_list_widget";
 | 
			
		||||
import {$t, $t_html, get_language_name} from "./i18n";
 | 
			
		||||
import * as keydown_util from "./keydown_util";
 | 
			
		||||
@@ -46,7 +46,7 @@ export function maybe_disable_widgets() {
 | 
			
		||||
        .prop("disabled", true);
 | 
			
		||||
 | 
			
		||||
    if (page_params.is_admin) {
 | 
			
		||||
        $("#deactivate_realm_button").prop("disabled", true);
 | 
			
		||||
        $(".deactivate_realm_button").prop("disabled", true);
 | 
			
		||||
        $("#deactivate_realm_button_container").addClass("disabled_setting_tooltip");
 | 
			
		||||
        $("#org-message-retention").find("input, select").prop("disabled", true);
 | 
			
		||||
        $("#org-join-settings").find("input, select").prop("disabled", true);
 | 
			
		||||
@@ -702,6 +702,32 @@ export function discard_property_element_changes(elem, for_realm_default_setting
 | 
			
		||||
    update_dependent_subsettings(property_name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function deactivate_organization(e) {
 | 
			
		||||
    e.preventDefault();
 | 
			
		||||
    e.stopPropagation();
 | 
			
		||||
 | 
			
		||||
    function do_deactivate_realm() {
 | 
			
		||||
        channel.post({
 | 
			
		||||
            url: "/json/realm/deactivate",
 | 
			
		||||
            error(xhr) {
 | 
			
		||||
                ui_report.error($t_html({defaultMessage: "Failed"}), xhr, $("#dialog_error"));
 | 
			
		||||
            },
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const html_body = render_settings_deactivate_realm_modal();
 | 
			
		||||
 | 
			
		||||
    dialog_widget.launch({
 | 
			
		||||
        html_heading: $t_html({defaultMessage: "Deactivate organization"}),
 | 
			
		||||
        help_link: "/help/deactivate-your-organization",
 | 
			
		||||
        html_body,
 | 
			
		||||
        on_click: do_deactivate_realm,
 | 
			
		||||
        close_on_submit: false,
 | 
			
		||||
        focus_submit_on_open: true,
 | 
			
		||||
        html_submit_button: $t_html({defaultMessage: "Confirm"}),
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function sync_realm_settings(property) {
 | 
			
		||||
    if (!meta.loaded) {
 | 
			
		||||
        return;
 | 
			
		||||
@@ -1411,30 +1437,5 @@ export function build_page() {
 | 
			
		||||
        realm_logo.build_realm_logo_widget(upload_realm_logo_or_icon, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $("#deactivate_realm_button").on("click", (e) => {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        e.stopPropagation();
 | 
			
		||||
 | 
			
		||||
        function do_deactivate_realm() {
 | 
			
		||||
            channel.post({
 | 
			
		||||
                url: "/json/realm/deactivate",
 | 
			
		||||
                error(xhr) {
 | 
			
		||||
                    ui_report.error(
 | 
			
		||||
                        $t_html({defaultMessage: "Failed"}),
 | 
			
		||||
                        xhr,
 | 
			
		||||
                        $("#admin-realm-deactivation-status").expectOne(),
 | 
			
		||||
                    );
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const html_body = render_settings_deactivate_realm_modal();
 | 
			
		||||
 | 
			
		||||
        confirm_dialog.launch({
 | 
			
		||||
            html_heading: $t_html({defaultMessage: "Deactivate organization"}),
 | 
			
		||||
            help_link: "/help/deactivate-your-organization",
 | 
			
		||||
            html_body,
 | 
			
		||||
            on_click: do_deactivate_realm,
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
    $("#organization-profile .deactivate_realm_button").on("click", deactivate_organization);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -167,9 +167,13 @@ h3,
 | 
			
		||||
    cursor: not-allowed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#account-settings .deactivate_realm_button {
 | 
			
		||||
    margin-left: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#change_email_button,
 | 
			
		||||
#user_deactivate_account_button,
 | 
			
		||||
#deactivate_realm_button {
 | 
			
		||||
.deactivate_realm_button {
 | 
			
		||||
    &:disabled {
 | 
			
		||||
        pointer-events: none;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1863,6 +1867,12 @@ $option_title_width: 180px;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (width < $mm_min) {
 | 
			
		||||
    .deactivate_realm_button {
 | 
			
		||||
        margin-top: 20px;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media only screen and (width < $lg_min) {
 | 
			
		||||
    /* Show bot-information-box at full width on small
 | 
			
		||||
       screen sizes. Not having this media query breaks the
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,11 @@
 | 
			
		||||
                            {{t 'Deactivate account' }}
 | 
			
		||||
                        </button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    {{#if owner_is_only_user_in_organization}}
 | 
			
		||||
                        <button type="submit" class="button rounded btn-danger deactivate_realm_button">
 | 
			
		||||
                            {{t 'Deactivate organization' }}
 | 
			
		||||
                        </button>
 | 
			
		||||
                    {{/if}}
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,7 @@
 | 
			
		||||
        <div class="deactivate-realm-section">
 | 
			
		||||
            <div class="input-group">
 | 
			
		||||
                <div id="deactivate_realm_button_container" class="inline-block {{#unless is_owner}}disabled_setting_tooltip{{/unless}}">
 | 
			
		||||
                    <button class="button rounded btn-danger" id="deactivate_realm_button">
 | 
			
		||||
                    <button class="button rounded btn-danger deactivate_realm_button">
 | 
			
		||||
                        {{t 'Deactivate organization' }}
 | 
			
		||||
                    </button>
 | 
			
		||||
                </div>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user