mirror of
https://github.com/kubeshark/kubeshark.git
synced 2026-03-17 10:02:17 +00:00
* Add `Queryable` component to show a green circle and use it in `EntryViewLine`
* Refactor `Queryable` component
* Use the `Queryable` component `EntryDetailed`
* Use the `Queryable` component `Summary`
* Instead of passing the style to `Queryable`, pass the children components directly
* Make `useTooltip = true` by default in `Queryable`
* Refactor a lot of styling to achieve using `Queryable` in `Protocol` component
* Migrate the last queryable elements in `EntryListItem` to `Queryable` component
* Fix some of the styling issues
* Make horizontal `Protocol` `Queryable` too
* Remove unnecessary child constants
* Revert some of the changes in 2a93f365f5
* Fix rest of the styling issues
* Fix one more styling issue
* Update the screenshots and text in the cheatsheet according to the change
* Use `let` not `var`
* Add missing dependencies to the React hook
63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import React, { useEffect, useState } from 'react';
|
|
import { CopyToClipboard } from 'react-copy-to-clipboard';
|
|
import AddCircleIcon from '@material-ui/icons/AddCircle';
|
|
import './style/Queryable.sass';
|
|
|
|
interface Props {
|
|
query: string,
|
|
updateQuery: any,
|
|
style?: object,
|
|
iconStyle?: object,
|
|
className?: string,
|
|
useTooltip?: boolean,
|
|
displayIconOnMouseOver?: boolean,
|
|
flipped?: boolean,
|
|
}
|
|
|
|
const Queryable: React.FC<Props> = ({query, updateQuery, style, iconStyle, className, useTooltip= true, displayIconOnMouseOver = false, flipped = false, children}) => {
|
|
const [showAddedNotification, setAdded] = useState(false);
|
|
const [showTooltip, setShowTooltip] = useState(false);
|
|
|
|
const onCopy = () => {
|
|
setAdded(true)
|
|
};
|
|
|
|
useEffect(() => {
|
|
let timer;
|
|
if (showAddedNotification) {
|
|
updateQuery(query);
|
|
timer = setTimeout(() => {
|
|
setAdded(false);
|
|
}, 1000);
|
|
}
|
|
return () => clearTimeout(timer);
|
|
}, [showAddedNotification, query, updateQuery]);
|
|
|
|
const addButton = query ? <CopyToClipboard text={query} onCopy={onCopy}>
|
|
<span
|
|
className={`Queryable-Icon`}
|
|
title={`Add "${query}" to the filter`}
|
|
style={iconStyle}
|
|
>
|
|
<AddCircleIcon fontSize="small" color="inherit"></AddCircleIcon>
|
|
{showAddedNotification && <span className={'Queryable-AddNotifier'}>Added</span>}
|
|
</span>
|
|
</CopyToClipboard> : null;
|
|
|
|
return (
|
|
<div
|
|
className={`Queryable-Container displayIconOnMouseOver ${className ? className : ''} ${displayIconOnMouseOver ? 'displayIconOnMouseOver ' : ''}`}
|
|
style={style}
|
|
onMouseOver={ e => setShowTooltip(true)}
|
|
onMouseLeave={ e => setShowTooltip(false)}
|
|
>
|
|
{flipped && addButton}
|
|
{children}
|
|
{!flipped && addButton}
|
|
{useTooltip && showTooltip && <span className={'Queryable-Tooltip'}>{query}</span>}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Queryable;
|