All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.js.seo.display_page_templates.hooks.useOnClickOutside.js Maven / Gradle / Ivy

There is a newer version: 2.0.92
Show newest version
/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

import React from 'react';

const {useEffect} = React;

export default function useOnClickOutside(elements, handler) {
	useEffect(() => {
		const listener = (event) => {

			/**
			 * Detect clicks on elements or their descendent elements.
			 */
			const filtered = elements.filter(
				(element) => element && element.contains(event.target)
			);

			if (!filtered.length) {
				handler(event);
			}
		};

		document.addEventListener('mousedown', listener);
		document.addEventListener('touchstart', listener);

		return () => {
			document.removeEventListener('mousedown', listener);
			document.removeEventListener('touchstart', listener);
		};
	}, [elements, handler]);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy