MCPcopy Create free account
hub / github.com/pgadmin-org/pgadmin4 / useBeforeUnload

Function useBeforeUnload

web/pgadmin/static/js/custom_hooks.js:242–288  ·  view source on GitHub ↗
({ enabled, isNewTab, beforeClose, closePanel })

Source from the content-addressed store, hash-verified

240}
241
242export function useBeforeUnload({ enabled, isNewTab, beforeClose, closePanel }) {
243 const onBeforeUnload = useCallback((e)=>{
244 e.preventDefault();
245 e.returnValue = 'prevent';
246 }, []);
247
248 const onBeforeUnloadElectron = useCallback((e)=>{
249 e.preventDefault();
250 e.returnValue = 'prevent';
251 window.electronUI?.focus();
252 beforeClose?.(forceClose);
253 }, []);
254
255 function forceClose() {
256 if(getBrowser().name == 'Electron' && isNewTab) {
257 window.removeEventListener('beforeunload', onBeforeUnloadElectron);
258 // somehow window.close was not working may becuase the removeEventListener
259 // was not completely executed. Add timeout.
260 setTimeout(()=>window.close(), 50);
261 } else {
262 closePanel?.();
263 }
264 }
265
266 useEffect(()=>{
267 if(getBrowser().name == 'Electron' && isNewTab) {
268 if(enabled) {
269 window.addEventListener('beforeunload', onBeforeUnloadElectron);
270 } else {
271 window.removeEventListener('beforeunload', onBeforeUnloadElectron);
272 }
273 } else if(getBrowser().name != 'Electron') {
274 if(enabled){
275 window.addEventListener('beforeunload', onBeforeUnload);
276 } else {
277 window.removeEventListener('beforeunload', onBeforeUnload);
278 }
279 }
280
281 return () => {
282 window.removeEventListener('beforeunload', onBeforeUnloadElectron);
283 window.removeEventListener('beforeunload', onBeforeUnload);
284 };
285 }, [enabled]);
286
287 return {forceClose};
288}
289
290export function useLatestFunc(fn) {
291 const fnRef = useRef(fn);

Callers 3

BeforeUnloadFunction · 0.90
QueryToolComponentFunction · 0.90
BrowserComponentFunction · 0.90

Calls 2

getBrowserFunction · 0.90
focusMethod · 0.80

Tested by

no test coverage detected