import React from 'react' import PropTypes from 'prop-types' import { useInput, useNotify, useTranslate } from 'react-admin' import { Button, TextField } from '@material-ui/core' import { FaKey } from 'react-icons/fa' import { MdContentCopy, MdDelete, MdRefresh } from 'react-icons/md' import { isWritable } from '../common/playlistUtils' import { generateApiKey } from './apiKey' const identity = (v) => v const MASK = '•'.repeat(26) const ApiKeyInput = ({ record, isCreate, fullWidth, className, ...props }) => { const translate = useTranslate() const notify = useNotify() // Identity format/parse keep "" (revoke) distinct from undefined (untouched) const { input: { value, onChange }, meta: { error, touched }, } = useInput({ ...props, format: identity, parse: identity }) const isOwner = isCreate || record?.userId === localStorage.getItem('userId') const pending = !!value const revoking = value === '' && !!record?.hasApiKey const saved = value == null && !!record?.hasApiKey const hasKey = pending || saved const copy = () => { const fallback = () => prompt(translate('message.shareCopyToClipboard'), value) if (navigator.clipboard && window.isSecureContext) { navigator.clipboard .writeText(value) .then( () => notify('resources.player.notifications.apiKeyCopied'), fallback, ) } else { fallback() } } const helperText = pending ? 'resources.player.message.apiKeyPending' : revoking ? 'resources.player.message.apiKeyRevokePending' : saved ? 'resources.player.message.apiKeyActive' : isOwner ? 'resources.player.message.apiKeyNone' : 'resources.player.message.apiKeyNoneOther' return (
{pending && ( )} {isOwner && ( )} {saved && isWritable(record?.userId) && ( )}
) } ApiKeyInput.propTypes = { source: PropTypes.string.isRequired, record: PropTypes.object, isCreate: PropTypes.bool, fullWidth: PropTypes.bool, className: PropTypes.string, validate: PropTypes.oneOfType([PropTypes.func, PropTypes.array]), } export default ApiKeyInput