mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	overlays: Fix dependency cycle between popover.js and overlays.js.
This is a Prep PR for #24426. Removes direct dependency cycle between 'popover.js' and overlays.js by creating popover.initialize method called from 'ui_init.js' that calls overlays.register_pre_open_hook(hide_all) and overlays.register_pre_close_hook(hide_all). Created a function call_hook that loop call all registered hooks at the start of 'open_overlay' and 'close_overlay'.
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							3bfbfb014a
						
					
				
				
					commit
					570c9e260b
				
			@@ -3,18 +3,34 @@ import Micromodal from "micromodal";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import * as blueslip from "./blueslip";
 | 
					import * as blueslip from "./blueslip";
 | 
				
			||||||
import * as browser_history from "./browser_history";
 | 
					import * as browser_history from "./browser_history";
 | 
				
			||||||
import * as popovers from "./popovers";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
let $active_overlay;
 | 
					let $active_overlay;
 | 
				
			||||||
let close_handler;
 | 
					let close_handler;
 | 
				
			||||||
let open_overlay_name;
 | 
					let open_overlay_name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const pre_open_hooks = [];
 | 
				
			||||||
 | 
					const pre_close_hooks = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function reset_state() {
 | 
					function reset_state() {
 | 
				
			||||||
    $active_overlay = undefined;
 | 
					    $active_overlay = undefined;
 | 
				
			||||||
    close_handler = undefined;
 | 
					    close_handler = undefined;
 | 
				
			||||||
    open_overlay_name = undefined;
 | 
					    open_overlay_name = undefined;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function register_pre_open_hook(func) {
 | 
				
			||||||
 | 
					    pre_open_hooks.push(func);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function register_pre_close_hook(func) {
 | 
				
			||||||
 | 
					    pre_close_hooks.push(func);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function call_hooks(func_list) {
 | 
				
			||||||
 | 
					    for (const element of func_list) {
 | 
				
			||||||
 | 
					        element();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function is_active() {
 | 
					export function is_active() {
 | 
				
			||||||
    return Boolean(open_overlay_name);
 | 
					    return Boolean(open_overlay_name);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -62,7 +78,7 @@ export function active_modal() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function open_overlay(opts) {
 | 
					export function open_overlay(opts) {
 | 
				
			||||||
    popovers.hide_all();
 | 
					    call_hooks(pre_open_hooks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!opts.name || !opts.$overlay || !opts.on_close) {
 | 
					    if (!opts.name || !opts.$overlay || !opts.on_close) {
 | 
				
			||||||
        blueslip.error("Programming error in open_overlay");
 | 
					        blueslip.error("Programming error in open_overlay");
 | 
				
			||||||
@@ -210,7 +226,7 @@ export function open_modal(selector, conf = {}) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function close_overlay(name) {
 | 
					export function close_overlay(name) {
 | 
				
			||||||
    popovers.hide_all();
 | 
					    call_hooks(pre_close_hooks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (name !== open_overlay_name) {
 | 
					    if (name !== open_overlay_name) {
 | 
				
			||||||
        blueslip.error("Trying to close " + name + " when " + open_overlay_name + " is open.");
 | 
					        blueslip.error("Trying to close " + name + " when " + open_overlay_name + " is open.");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,11 @@ let userlist_placement = "right";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
let list_of_popovers = [];
 | 
					let list_of_popovers = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function initialize() {
 | 
				
			||||||
 | 
					    overlays.register_pre_open_hook(hide_all);
 | 
				
			||||||
 | 
					    overlays.register_pre_close_hook(hide_all);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function clear_for_testing() {
 | 
					export function clear_for_testing() {
 | 
				
			||||||
    $current_message_info_popover_elem = undefined;
 | 
					    $current_message_info_popover_elem = undefined;
 | 
				
			||||||
    $current_user_info_popover_elem = undefined;
 | 
					    $current_user_info_popover_elem = undefined;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,6 +62,7 @@ import * as people from "./people";
 | 
				
			|||||||
import * as pm_conversations from "./pm_conversations";
 | 
					import * as pm_conversations from "./pm_conversations";
 | 
				
			||||||
import * as pm_list from "./pm_list";
 | 
					import * as pm_list from "./pm_list";
 | 
				
			||||||
import * as popover_menus from "./popover_menus";
 | 
					import * as popover_menus from "./popover_menus";
 | 
				
			||||||
 | 
					import * as popovers from "./popovers";
 | 
				
			||||||
import * as presence from "./presence";
 | 
					import * as presence from "./presence";
 | 
				
			||||||
import * as realm_logo from "./realm_logo";
 | 
					import * as realm_logo from "./realm_logo";
 | 
				
			||||||
import * as realm_playground from "./realm_playground";
 | 
					import * as realm_playground from "./realm_playground";
 | 
				
			||||||
@@ -578,6 +579,7 @@ export function initialize_everything() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    i18n.initialize(i18n_params);
 | 
					    i18n.initialize(i18n_params);
 | 
				
			||||||
    tippyjs.initialize();
 | 
					    tippyjs.initialize();
 | 
				
			||||||
 | 
					    popovers.initialize();
 | 
				
			||||||
    popover_menus.initialize();
 | 
					    popover_menus.initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    initialize_user_settings(user_settings_params);
 | 
					    initialize_user_settings(user_settings_params);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user