mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	When you select a typeahead, it shouldn't immediately do the action for you; you should have to hit enter first. Even though 99% of the time you're gonna confirm the typeahead, it's jarring when you don't expect it. You can still add a bunch of default streams quickly, using only the keyboard, because we have always had support for the enter key saving. (and tab and enter also works)
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const render_admin_default_streams_list = require("../templates/admin_default_streams_list.hbs");
 | 
						|
 | 
						|
const meta = {
 | 
						|
    loaded: false,
 | 
						|
};
 | 
						|
 | 
						|
exports.reset = function () {
 | 
						|
    meta.loaded = false;
 | 
						|
};
 | 
						|
 | 
						|
exports.maybe_disable_widgets = function () {
 | 
						|
    if (page_params.is_admin) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    $(".organization-box [data-name='default-streams-list']")
 | 
						|
        .find("input:not(.search), button, select").attr("disabled", true);
 | 
						|
};
 | 
						|
 | 
						|
exports.build_default_stream_table = function () {
 | 
						|
    const table = $("#admin_default_streams_table").expectOne();
 | 
						|
 | 
						|
    const stream_ids = stream_data.get_default_stream_ids();
 | 
						|
    const subs = stream_ids.map(stream_data.get_sub_by_id);
 | 
						|
 | 
						|
    const streams_list = list_render.create(table, subs, {
 | 
						|
        name: "default_streams_list",
 | 
						|
        modifier: function (item) {
 | 
						|
            const row = $(render_admin_default_streams_list({
 | 
						|
                stream: item,
 | 
						|
                can_modify: page_params.is_admin,
 | 
						|
            }));
 | 
						|
            return row;
 | 
						|
        },
 | 
						|
        filter: {
 | 
						|
            element: table.closest(".settings-section").find(".search"),
 | 
						|
            predicate: function (item, query) {
 | 
						|
                return item.name.toLowerCase().includes(query.toLowerCase());
 | 
						|
            },
 | 
						|
            onupdate: function () {
 | 
						|
                ui.reset_scrollbar(table);
 | 
						|
            },
 | 
						|
        },
 | 
						|
        parent_container: $("#admin-default-streams-list").expectOne(),
 | 
						|
    }).init();
 | 
						|
 | 
						|
    streams_list.sort("alphabetic", "name");
 | 
						|
 | 
						|
    loading.destroy_indicator($('#admin_page_default_streams_loading_indicator'));
 | 
						|
};
 | 
						|
 | 
						|
exports.update_default_streams_table = function () {
 | 
						|
    if (/#*organization/.test(window.location.hash) ||
 | 
						|
        /#*settings/.test(window.location.hash)) {
 | 
						|
        $("#admin_default_streams_table").expectOne().find("tr.default_stream_row").remove();
 | 
						|
        exports.build_default_stream_table();
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
function make_stream_default(stream_name) {
 | 
						|
    const data = {
 | 
						|
        stream_name: stream_name,
 | 
						|
    };
 | 
						|
    const default_stream_status = $("#admin-default-stream-status");
 | 
						|
    default_stream_status.hide();
 | 
						|
 | 
						|
    channel.post({
 | 
						|
        url: '/json/default_streams',
 | 
						|
        data: data,
 | 
						|
        error: function (xhr) {
 | 
						|
            if (xhr.status.toString().charAt(0) === "4") {
 | 
						|
                ui_report.error(i18n.t("Failed"), xhr, default_stream_status);
 | 
						|
            } else {
 | 
						|
                ui_report.error(i18n.t("Failed"), default_stream_status);
 | 
						|
            }
 | 
						|
            default_stream_status.show();
 | 
						|
        },
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
exports.delete_default_stream = function (stream_id, default_stream_row, alert_element) {
 | 
						|
    channel.del({
 | 
						|
        url: "/json/default_streams" + "?" + $.param({ stream_id: stream_id }),
 | 
						|
        error: function (xhr) {
 | 
						|
            ui_report.generic_row_button_error(xhr, alert_element);
 | 
						|
        },
 | 
						|
        success: function () {
 | 
						|
            default_stream_row.remove();
 | 
						|
        },
 | 
						|
    });
 | 
						|
};
 | 
						|
 | 
						|
exports.set_up = function () {
 | 
						|
    exports.build_page();
 | 
						|
    exports.maybe_disable_widgets();
 | 
						|
};
 | 
						|
 | 
						|
exports.build_page = function () {
 | 
						|
    meta.loaded = true;
 | 
						|
 | 
						|
    exports.update_default_streams_table();
 | 
						|
 | 
						|
    $('.create_default_stream').keypress(function (e) {
 | 
						|
        if (e.which === 13) {
 | 
						|
            e.preventDefault();
 | 
						|
            e.stopPropagation();
 | 
						|
            const default_stream_input = $(".create_default_stream");
 | 
						|
            make_stream_default(default_stream_input.val());
 | 
						|
            default_stream_input[0].value = "";
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    $('.create_default_stream').typeahead({
 | 
						|
        items: 5,
 | 
						|
        fixed: true,
 | 
						|
        source: function () {
 | 
						|
            return stream_data.get_non_default_stream_names();
 | 
						|
        },
 | 
						|
        highlighter: function (item) {
 | 
						|
            return typeahead_helper.render_typeahead_item({ primary: item });
 | 
						|
        },
 | 
						|
    });
 | 
						|
 | 
						|
    $(".default-stream-form").on("click", "#do_submit_stream", function (e) {
 | 
						|
        e.preventDefault();
 | 
						|
        e.stopPropagation();
 | 
						|
        const default_stream_input = $(".create_default_stream");
 | 
						|
        make_stream_default(default_stream_input.val());
 | 
						|
        // Clear value inside input box
 | 
						|
        default_stream_input[0].value = "";
 | 
						|
    });
 | 
						|
 | 
						|
    $("body").on("click", ".default_stream_row .remove-default-stream", function (e) {
 | 
						|
        const row = $(this).closest(".default_stream_row");
 | 
						|
        const stream_id = parseInt(row.attr("data-stream-id"), 10);
 | 
						|
        exports.delete_default_stream(stream_id, row, $(e.target));
 | 
						|
    });
 | 
						|
};
 | 
						|
 | 
						|
window.settings_streams = exports;
 |