-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathRestoreButton.tsx
58 lines (54 loc) · 2 KB
/
RestoreButton.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// SPDX-FileCopyrightText: Meta Platforms, Inc. and its affiliates
// SPDX-FileCopyrightText: TNG Technology Consulting GmbH <https://www.tngtech.com>
//
// SPDX-License-Identifier: Apache-2.0
import RestoreFromTrashIcon from '@mui/icons-material/RestoreFromTrash';
import MuiIconButton from '@mui/material/IconButton';
import MuiTooltip from '@mui/material/Tooltip';
import { useMemo } from 'react';
import { text } from '../../../../../shared/text';
import { removeResolvedExternalAttributionAndSave } from '../../../../state/actions/resource-actions/save-actions';
import { useAppDispatch, useAppSelector } from '../../../../state/hooks';
import { getResolvedExternalAttributions } from '../../../../state/selectors/resource-selectors';
import { useAreHiddenSignalsVisible } from '../../../../state/variables/use-are-hidden-signals-visible';
import { PackagesPanelChildrenProps } from '../../PackagesPanel/PackagesPanel';
export const RestoreButton: React.FC<PackagesPanelChildrenProps> = ({
selectedAttributionIds,
}) => {
const dispatch = useAppDispatch();
const resolvedExternalAttributionIds = useAppSelector(
getResolvedExternalAttributions,
);
const areHiddenSignalsVisible = useAreHiddenSignalsVisible();
const someSelectedAttributionsAreHidden = useMemo(
() =>
!!selectedAttributionIds.length &&
selectedAttributionIds.some((id) =>
resolvedExternalAttributionIds.has(id),
),
[resolvedExternalAttributionIds, selectedAttributionIds],
);
if (!areHiddenSignalsVisible) {
return null;
}
return (
<MuiIconButton
aria-label={text.packageLists.restore}
disabled={!someSelectedAttributionsAreHidden}
size={'small'}
onClick={() => {
dispatch(
removeResolvedExternalAttributionAndSave(selectedAttributionIds),
);
}}
>
<MuiTooltip
title={text.packageLists.restore}
disableInteractive
placement={'top'}
>
<RestoreFromTrashIcon />
</MuiTooltip>
</MuiIconButton>
);
};