UNPKG

@letanure/resend-cli

Version:

A command-line interface for Resend email API

117 lines 5.43 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { Spinner } from '@inkjs/ui'; import { Box, useInput } from 'ink'; import React, { useState } from 'react'; import { SimpleForm } from '../../../components/forms/SimpleForm.js'; import { ErrorScreen } from '../../../components/ui/ErrorScreen.js'; import { Layout } from '../../../components/ui/layout.js'; import { SuccessScreen } from '../../../components/ui/SuccessScreen.js'; import { config } from '../../../config/config.js'; import { useDryRun } from '../../../contexts/DryRunProvider.js'; import { useResend } from '../../../contexts/ResendProvider.js'; import { useApiKeySelector } from '../../../hooks/useApiKeySelector.js'; import { deleteApiKey } from './action.js'; import { fields } from './fields.js'; import { deleteApiKeySchema } from './schema.js'; export const Form = ({ onExit }) => { const { isDryRun } = useDryRun(); const { apiKey } = useResend(); const [isSubmitting, setIsSubmitting] = useState(false); const [successData, setSuccessData] = useState(null); const [isDryRunSuccess, setIsDryRunSuccess] = useState(false); const [error, setError] = useState(null); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); const initialFormData = React.useMemo(() => { return selectedApiKeyId ? { api_key_id: selectedApiKeyId } : undefined; }, [selectedApiKeyId]); const apiKeySelector = useApiKeySelector((apiKeyId) => { setSelectedApiKeyId(apiKeyId); }); // Create form fields with API key selector const formFields = React.useMemo(() => { return fields.map((field) => { if (field.name === 'api_key_id') { return { ...field, type: 'input-with-selector', onSelectorOpen: apiKeySelector.openSelector, }; } return field; }); }, [apiKeySelector.openSelector]); // Handle Esc/Left arrow key to go back from result screens useInput((_input, key) => { if ((key.escape || key.leftArrow) && (successData || error)) { setSuccessData(null); setIsDryRunSuccess(false); setError(null); } }, { isActive: !!(successData || error) }); const handleSubmit = async (data) => { setIsSubmitting(true); try { if (isDryRun) { setSuccessData({ 'API Key ID': data.api_key_id, 'API Key': apiKey ? `${apiKey.substring(0, 10)}...` : 'Not set', Status: 'Validation successful! (API key not deleted due to dry-run mode)', }); setIsDryRunSuccess(true); } else { const result = await deleteApiKey(data, apiKey); if (result.success && result.data) { setSuccessData({ 'API Key ID': data.api_key_id, 'Object Type': 'api_key', Status: 'Deleted successfully', }); setIsDryRunSuccess(false); } else { setError({ title: 'API Key Deletion Failed', message: result.error || 'Unknown error occurred', suggestion: 'Check the API key ID and ensure it exists in your Resend account', }); } } } catch (error) { setError({ title: 'API Key Deletion Error', message: error instanceof Error ? error.message : 'Unknown error', suggestion: 'Please check your API key and network connection', }); } finally { setIsSubmitting(false); } }; if (isSubmitting) { return (_jsx(Layout, { headerText: `${config.baseTitle} - API Keys - Delete`, showNavigationInstructions: false, navigationContext: "none", children: _jsx(Spinner, { label: "Deleting API key..." }) })); } if (successData) { return (_jsx(SuccessScreen, { data: successData, successMessage: "API Key Deleted Successfully", headerText: `${config.baseTitle} - API Keys - Delete`, isDryRun: isDryRunSuccess, onExit: () => { setSuccessData(null); setIsDryRunSuccess(false); onExit(); } })); } if (error) { return (_jsx(ErrorScreen, { title: error.title, message: error.message, suggestion: error.suggestion, headerText: `${config.baseTitle} - API Keys - Delete`, onExit: () => { setError(null); onExit(); }, showRetry: true, onRetry: () => { setError(null); setIsSubmitting(false); } })); } // If the API key selector is open, render it instead of the form if (apiKeySelector.isOpen) { return apiKeySelector.selectorComponent; } return (_jsx(Layout, { headerText: `${config.baseTitle} - API Keys - Delete`, showNavigationInstructions: true, navigationContext: "form-single", children: _jsx(Box, { flexDirection: "column", children: _jsx(SimpleForm, { fields: formFields, onSubmit: handleSubmit, onCancel: onExit, validateWith: deleteApiKeySchema, initialData: initialFormData }) }) })); }; //# sourceMappingURL=Form.js.map