1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-02 06:07:06 +01:00
metamask-extension/ui/pages/settings/flask/snaps-list-tab/snap-list-tab.js
Hassan Malik f192929a04
Add snaps search (#14100)
* added snaps routes

* changed settings search icons to font-awesome

* removed manual input of id

* added snap list to search

* removed console.logs and changed settingsRef to an array to work with settings search helper functions

* lint fixes

* updated tests

* test fix

* fixed util function

* renamed vars

* fixed spelling

* deps fix
2022-03-23 12:47:54 -04:00

101 lines
3.2 KiB
JavaScript

import React, { useMemo, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useHistory } from 'react-router-dom';
import SnapSettingsCard from '../../../../components/app/flask/snap-settings-card';
import { useI18nContext } from '../../../../hooks/useI18nContext';
import Typography from '../../../../components/ui/typography/typography';
import {
TYPOGRAPHY,
COLORS,
FLEX_DIRECTION,
JUSTIFY_CONTENT,
ALIGN_ITEMS,
} from '../../../../helpers/constants/design-system';
import Box from '../../../../components/ui/box';
import { SNAPS_VIEW_ROUTE } from '../../../../helpers/constants/routes';
import { disableSnap, enableSnap } from '../../../../store/actions';
import { getSnaps } from '../../../../selectors';
import { handleSettingsRefs } from '../../../../helpers/utils/settings-search';
const SnapListTab = () => {
const t = useI18nContext();
const history = useHistory();
const dispatch = useDispatch();
const snaps = useSelector(getSnaps);
const settingsRef = useMemo(() => [React.createRef()], []);
const onClick = (snap) => {
const route = `${SNAPS_VIEW_ROUTE}/${window.btoa(
unescape(encodeURIComponent(snap.id)),
)}`;
history.push(route);
};
const onToggle = (snap) => {
if (snap.enabled) {
dispatch(disableSnap(snap.id));
} else {
dispatch(enableSnap(snap.id));
}
};
useEffect(() => {
handleSettingsRefs(t, t('snaps'), settingsRef);
}, [t, settingsRef]);
return (
<div className="snap-list-tab" ref={settingsRef}>
{Object.entries(snaps).length ? (
<div className="snap-list-tab__body">
<Box display="flex" flexDirection={FLEX_DIRECTION.COLUMN}>
<Typography variant={TYPOGRAPHY.H5} marginBottom={2}>
{t('expandExperience')}
</Typography>
<Typography
variant={TYPOGRAPHY.H6}
color={COLORS.TEXT_ALTERNATIVE}
marginBottom={2}
>
{t('manageSnaps')}
</Typography>
</Box>
<div className="snap-list-tab__wrapper">
{Object.entries(snaps).map(([key, snap]) => {
return (
<SnapSettingsCard
className="snap-settings-card"
isEnabled={snap.enabled}
key={key}
onToggle={() => {
onToggle(snap);
}}
description={snap.manifest.description}
url={snap.id}
name={snap.manifest.proposedName}
status={snap.status}
version={snap.version}
onClick={() => {
onClick(snap);
}}
/>
);
})}
</div>
</div>
) : (
<Box
className="snap-list-tab__container--no-snaps"
width="full"
height="full"
justifyContent={JUSTIFY_CONTENT.CENTER}
alignItems={ALIGN_ITEMS.CENTER}
>
<Typography variant={TYPOGRAPHY.H4} color={COLORS.TEXT_ALTERNATIVE}>
<span>{t('noSnaps')}</span>
</Typography>
</Box>
)}
</div>
);
};
export default SnapListTab;