import {Fragment, useState} from 'react'; import styled from '@emotion/styled'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; import {DateTime} from 'sentry/components/dateTime'; import EmptyMessage from 'sentry/components/emptyMessage'; import Input from 'sentry/components/input'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; import PanelHeader from 'sentry/components/panels/panelHeader'; import PanelItem from 'sentry/components/panels/panelItem'; import {Tooltip} from 'sentry/components/tooltip'; import {IconClose, IconDelete} from 'sentry/icons'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import ConfirmHeader from 'sentry/views/settings/account/accountSecurity/components/confirmHeader'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; function U2fEnrolledDetails(props) { const {className, isEnrolled, devices, id, onRemoveU2fDevice, onRenameU2fDevice} = props; if (id !== 'u2f' || !isEnrolled) { return null; } const hasDevices = devices?.length; // Note Tooltip doesn't work because of bootstrap(?) pointer events for disabled buttons const isLastDevice = hasDevices === 1; return ( {t('Device name')} {!hasDevices && ( {t('You have not added any U2F devices')} )} {hasDevices && devices?.map((device, i) => ( ))} ); } function Device(props) { const {device, isLastDevice, onRenameU2fDevice, onRemoveU2fDevice} = props; const [deviceName, setDeviceName] = useState(device.name); const [isEditing, setEditting] = useState(false); if (!isEditing) { return ( {device.name} onRemoveU2fDevice(device)} disabled={isLastDevice} message={ {t('Do you want to remove U2F device?')} {t('Are you sure you want to remove the U2F device "%s"?', device.name)} } > ); } return ( { setDeviceName(e.target.value); }} /> ); } const DeviceNameInput = styled(Input)` width: 50%; margin-right: ${space(2)}; `; const DevicePanelItem = styled(PanelItem)` padding: 0; `; const DeviceInformation = styled('div')` display: flex; align-items: center; justify-content: space-between; flex: 1 1; height: 72px; padding: ${space(2)}; padding-right: 0; `; const FadedDateTime = styled(DateTime)` font-size: ${p => p.theme.fontSizeRelativeSmall}; opacity: 0.6; `; const Name = styled('div')` flex: 1; `; const Actions = styled('div')` margin: ${space(2)}; `; const AddAnotherPanelItem = styled(PanelItem)` justify-content: flex-end; padding: ${space(2)}; `; export default styled(U2fEnrolledDetails)` margin-top: ${space(4)}; `;