{t('Available credits are ordered by soonest expiration.')}
{t('Reset usage window')}
{t(
'Use one available reset credit to refresh the current Codex usage windows.'
)}
{!canReset ? (
{t('No reset credits available')}
{t('The reset request stays disabled until a credit is available.')}
) : null}
{props.resetSuccessMessage ? (
{t('Reset completed')}
{props.resetSuccessMessage}
) : null}
{props.resetErrorMessage ? (
{t('Reset failed')}
{props.resetErrorMessage}
) : null}
{props.errorMessage ? (
{props.errorMessage}
) : props.isLoading ? (
) : credits.length > 0 ? (
{credits.map((credit, index) => (
))}
) : (
{t('No reset credits')}
{t('Upstream did not return reset credit details.')}
)}
)
}
export function CodexUsageDialog({
open,
onOpenChange,
channelName,
channelId,
response,
onRefresh,
isRefreshing,
}: CodexUsageDialogProps) {
const { t } = useTranslation()
const { copiedText, copyToClipboard } = useCopyToClipboard({ notify: false })
const [showRawJson, setShowRawJson] = useState(false)
const [showResetCredits, setShowResetCredits] = useState(false)
const [resetCreditsResponse, setResetCreditsResponse] =
useState