umami/src/components/metrics/FilterTags.js

56 lines
1.5 KiB
JavaScript
Raw Normal View History

2022-08-29 05:20:54 +02:00
import { safeDecodeURI } from 'next-basics';
import { Button, Icon, Icons, Text } from 'react-basics';
2023-10-03 18:45:02 +02:00
import useNavigation from 'components/hooks/useNavigation';
import useMessages from 'components/hooks/useMessages';
2023-08-26 01:05:02 +02:00
import styles from './FilterTags.module.css';
2021-11-22 07:00:14 +01:00
2023-04-21 17:00:42 +02:00
export function FilterTags({ params }) {
2023-03-22 22:05:55 +01:00
const { formatMessage, labels } = useMessages();
const {
router,
2023-10-03 18:45:02 +02:00
makeUrl,
query: { view },
2023-10-03 18:45:02 +02:00
} = useNavigation();
2021-11-22 07:00:14 +01:00
if (Object.keys(params).filter(key => params[key]).length === 0) {
return null;
}
function handleCloseFilter(param) {
2023-04-02 05:03:38 +02:00
if (!param) {
2023-10-03 18:45:02 +02:00
router.push(makeUrl({ view }, true));
} else {
2023-10-03 18:45:02 +02:00
router.push(makeUrl({ [param]: undefined }));
}
}
2021-11-22 07:00:14 +01:00
return (
<div className={styles.filters}>
2023-08-26 01:05:02 +02:00
<div className={styles.label}>{formatMessage(labels.filters)}</div>
2021-11-22 07:00:14 +01:00
{Object.keys(params).map(key => {
if (!params[key]) {
return null;
}
return (
2023-03-11 02:49:19 +01:00
<div key={key} className={styles.tag} onClick={() => handleCloseFilter(key)}>
<Text>
<b>{`${key}`}</b> = {`${safeDecodeURI(params[key])}`}
</Text>
<Icon>
<Icons.Close />
</Icon>
2021-11-22 07:00:14 +01:00
</div>
);
})}
2023-04-02 05:03:38 +02:00
<Button size="sm" variant="quiet" onClick={() => handleCloseFilter()}>
<Icon>
<Icons.Close />
</Icon>
<Text>{formatMessage(labels.clearAll)}</Text>
</Button>
2021-11-22 07:00:14 +01:00
</div>
);
}
2023-04-21 17:00:42 +02:00
export default FilterTags;