mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import type { ObservableSnapshot, SessionId } from '@deepseek-ai/dsh-client-runtime/client'
|
|
import { Button, Modal } from '@deepseek-ai/dsh-client-ui-primitives'
|
|
import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'
|
|
import type { SessionLogDownloadState } from './controller.ts'
|
|
import { NS } from './locales.ts'
|
|
|
|
/** Browser operations and state injected into the Session Header contribution. */
|
|
export interface SessionLogDownloadDialogInjected {
|
|
hooks: { sessionLogDownload: ObservableSnapshot<SessionLogDownloadState> }
|
|
request: (sessionId: SessionId) => Promise<void>
|
|
dismiss: (sessionId: SessionId) => void
|
|
}
|
|
|
|
export type SessionLogDownloadDialogProps =
|
|
PropsRuntime<'conversation.session.header.utilities'>
|
|
& PropsLocale<typeof NS>
|
|
& InjectFace<SessionLogDownloadDialogInjected>
|
|
|
|
/**
|
|
* Modal shared by the Session Header button and this browser's `/export` command.
|
|
* @param props - Session runtime, bound controller state, actions, and localized copy.
|
|
* @returns the modal portal contribution.
|
|
*/
|
|
export function SessionLogDownloadDialog({
|
|
sessionId, useSessionLogDownload, dismiss, t,
|
|
}: SessionLogDownloadDialogProps) {
|
|
const entry = useSessionLogDownload(state => state.bySession[String(sessionId)])
|
|
|
|
const status = entry?.status
|
|
const open = entry?.open === true
|
|
const error = status === 'error' ? entry?.error || t('dialog.commandFailed') : null
|
|
const title = status === 'downloading'
|
|
? t('dialog.preparingTitle')
|
|
: status === 'success' ? t('dialog.successTitle') : t('dialog.errorTitle')
|
|
const description = status === 'downloading'
|
|
? t('dialog.preparingDescription')
|
|
: status === 'success' ? t('dialog.successDescription') : error ?? t('dialog.commandFailed')
|
|
|
|
return (
|
|
<Modal
|
|
open={open}
|
|
onClose={() => { dismiss(sessionId) }}
|
|
title={title}
|
|
description={description}
|
|
closeLabel={t('dialog.close')}
|
|
footer={<Button variant="primary" onClick={() => { dismiss(sessionId) }}>{t('dialog.close')}</Button>}
|
|
/>
|
|
)
|
|
}
|