mirror of
https://git.vectorsigma.ru/public/AdGuardHome.git
synced 2026-08-04 23:19:16 +00:00
Updates #684 Squashed commit of the following: commit 2c5ac44d3edb55d0d3be169fb0bbfb336920964d Merge: 0fce61dfa733d6c1fcAuthor: Ildar Kamalov <ik@adguard.com> Date: Mon Oct 16 10:08:58 2023 +0300 Merge branch 'master' into ADG-7200 commit 0fce61dfad31951c3d5a484a14383c58964b47f0 Author: Ildar Kamalov <ik@adguard.com> Date: Fri Oct 13 16:38:13 2023 +0300 fix dashboard clients table block/unblock button commit ef5d72fd7cac81b70503c8813cf6e96952ec3b65 Merge: f49281b88506d71310Author: Ildar Kamalov <ik@adguard.com> Date: Fri Oct 13 16:16:21 2023 +0300 Merge branch 'master' into ADG-7200 commit f49281b8818728ab298d769b8164919ea415d6c9 Author: Ildar Kamalov <ik@adguard.com> Date: Thu Oct 12 11:25:05 2023 +0300 fix disabled commit 0031861174108214e9741852f6e00c5873c3b20f Author: Ildar Kamalov <ik@adguard.com> Date: Thu Oct 12 11:20:50 2023 +0300 fix icon color commit 2916937b0d6a0d126bd48e59f41a6fcbc4622ea1 Author: Ildar Kamalov <ik@adguard.com> Date: Thu Oct 12 11:15:55 2023 +0300 changelog commit 34493c974fb9304267e9149360c802d9364dd7de Merge: d3267bbe9d3fabdda4Author: Ildar Kamalov <ik@adguard.com> Date: Thu Oct 12 11:13:43 2023 +0300 Merge branch 'master' into ADG-7200 commit d3267bbe9477d6db0783534cb4ab4f7afc4d63b0 Merge: 58a6c766f6a3661562Author: Ildar Kamalov <ik@adguard.com> Date: Wed Oct 11 16:46:39 2023 +0300 Merge branch 'master' into ADG-7200 commit 58a6c766f3b783f0e2fdc36d40889042f3c74f2f Author: Ildar Kamalov <ik@adguard.com> Date: Wed Oct 11 16:46:13 2023 +0300 ADG-7200 move block/unblock button to the tooltip menu
106 lines
2.8 KiB
JavaScript
106 lines
2.8 KiB
JavaScript
import React from 'react';
|
|
import TooltipTrigger from 'react-popper-tooltip';
|
|
import propTypes from 'prop-types';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
import {
|
|
HIDE_TOOLTIP_DELAY,
|
|
MEDIUM_SCREEN_SIZE,
|
|
SHOW_TOOLTIP_DELAY,
|
|
} from '../../helpers/constants';
|
|
import 'react-popper-tooltip/dist/styles.css';
|
|
import './Tooltip.css';
|
|
|
|
const Tooltip = ({
|
|
children,
|
|
content,
|
|
triggerClass = 'tooltip-custom__trigger',
|
|
className = 'tooltip-container',
|
|
placement = 'bottom',
|
|
trigger = 'hover',
|
|
delayShow = SHOW_TOOLTIP_DELAY,
|
|
delayHide = HIDE_TOOLTIP_DELAY,
|
|
onVisibilityChange,
|
|
defaultTooltipShown,
|
|
}) => {
|
|
const { t } = useTranslation();
|
|
const touchEventsAvailable = 'ontouchstart' in window;
|
|
|
|
let triggerValue = trigger;
|
|
let delayHideValue = delayHide;
|
|
let delayShowValue = delayShow;
|
|
|
|
if (window.matchMedia(`(max-width: ${MEDIUM_SCREEN_SIZE}px)`).matches || touchEventsAvailable) {
|
|
triggerValue = 'click';
|
|
delayHideValue = 0;
|
|
delayShowValue = 0;
|
|
}
|
|
|
|
const renderTooltip = ({ tooltipRef, getTooltipProps }) => (
|
|
<div
|
|
{...getTooltipProps({
|
|
ref: tooltipRef,
|
|
className,
|
|
})}
|
|
>
|
|
{typeof content === 'string' ? t(content) : content}
|
|
</div>
|
|
);
|
|
|
|
const renderTrigger = ({ getTriggerProps, triggerRef }) => (
|
|
<span
|
|
{...getTriggerProps({
|
|
ref: triggerRef,
|
|
className: triggerClass,
|
|
})}
|
|
>
|
|
{children}
|
|
</span>
|
|
);
|
|
|
|
renderTooltip.propTypes = {
|
|
tooltipRef: propTypes.object,
|
|
getTooltipProps: propTypes.func,
|
|
};
|
|
|
|
renderTrigger.propTypes = {
|
|
triggerRef: propTypes.object,
|
|
getTriggerProps: propTypes.func,
|
|
};
|
|
|
|
return (
|
|
<TooltipTrigger
|
|
placement={placement}
|
|
trigger={triggerValue}
|
|
delayHide={delayHideValue}
|
|
delayShow={delayShowValue}
|
|
tooltip={renderTooltip}
|
|
onVisibilityChange={onVisibilityChange}
|
|
defaultTooltipShown={defaultTooltipShown}
|
|
>
|
|
{renderTrigger}
|
|
</TooltipTrigger>
|
|
);
|
|
};
|
|
|
|
Tooltip.propTypes = {
|
|
children: propTypes.element.isRequired,
|
|
content: propTypes.oneOfType(
|
|
[
|
|
propTypes.string,
|
|
propTypes.element,
|
|
propTypes.arrayOf(propTypes.element),
|
|
],
|
|
).isRequired,
|
|
placement: propTypes.string,
|
|
trigger: propTypes.string,
|
|
delayHide: propTypes.number,
|
|
delayShow: propTypes.number,
|
|
className: propTypes.string,
|
|
triggerClass: propTypes.string,
|
|
onVisibilityChange: propTypes.func,
|
|
defaultTooltipShown: propTypes.bool,
|
|
};
|
|
|
|
export default Tooltip;
|