nodes-ui-flow / src /components /Toolbar.jsx
markitzeroo
Deploy updated nodes UI flow
1dd9186
export default function Toolbar({
backendUrl,
liveDebugUrl,
breadcrumbs,
canCreateComponent,
isRunning,
isInsideComponent,
isDemo,
notice,
onCreateComponent,
onGoBack,
onGoRoot,
onOpenSettings,
theme,
onToggleTheme,
onRun,
liveDebugStatus = 'off',
onToggleLiveDebug,
llmTestMode,
onLlmTestRun,
onStopLlmTest,
onNew,
onSave,
onSaveAs,
onLoad,
}) {
return (
<header className="toolbar">
<div className="toolbar__group">
<button type="button" className="toolbar__button toolbar__button--primary" onClick={onRun} disabled={isRunning}>
{isRunning ? 'Идет...' : 'Интерактивный прогон'}
</button>
{isDemo ? (
<button type="button" className="toolbar__button" onClick={onLoad} disabled={isRunning}>
Открыть
</button>
) : null}
{!isDemo ? (
<>
<button
type="button"
className="toolbar__button"
onClick={llmTestMode ? onStopLlmTest : onLlmTestRun}
disabled={isRunning && !llmTestMode}
>
{llmTestMode ? 'Остановить LLM тест' : 'LLM тест'}
</button>
<button
type="button"
className={`toolbar__button toolbar__button--live ${liveDebugStatus === 'connected' ? 'is-connected' : ''}`}
onClick={onToggleLiveDebug}
disabled={liveDebugStatus === 'connecting'}
title="Подключиться к live-состоянию workflow runtime"
>
{liveDebugStatus === 'connected'
? 'Отключить live'
: liveDebugStatus === 'connecting'
? 'Live...'
: 'Live debug'}
</button>
<button type="button" className="toolbar__button" onClick={onCreateComponent} disabled={!canCreateComponent || isRunning}>
Создать компонент
</button>
{isInsideComponent ? (
<button type="button" className="toolbar__button" onClick={onGoBack} disabled={isRunning}>
Назад
</button>
) : null}
<button type="button" className="toolbar__button" onClick={onOpenSettings}>
Настройки
</button>
<button type="button" className="toolbar__button" onClick={onNew} disabled={isRunning}>
Новый
</button>
<button type="button" className="toolbar__button" onClick={onSave} disabled={isRunning}>
Сохранить
</button>
<button type="button" className="toolbar__button" onClick={onSaveAs} disabled={isRunning}>
Сохранить как
</button>
<button type="button" className="toolbar__button" onClick={onLoad} disabled={isRunning}>
Открыть
</button>
</>
) : null}
</div>
<div className="toolbar__meta">
{!isDemo && breadcrumbs?.length ? (
<div className="toolbar__breadcrumbs">
{breadcrumbs.map((crumb, index) => (
<button
key={crumb.id}
type="button"
className={`toolbar__crumb ${index === breadcrumbs.length - 1 ? 'is-current' : ''}`}
onClick={index === 0 ? onGoRoot : () => crumb.onClick?.()}
>
{crumb.label}
</button>
))}
</div>
) : null}
<button type="button" className="toolbar__button toolbar__button--theme" onClick={onToggleTheme}>
{theme === 'dark' ? 'Светлая тема' : 'Темная тема'}
</button>
{!isDemo ? (
<>
<span className="toolbar__backend">Backend: {backendUrl}</span>
{liveDebugUrl && liveDebugUrl !== backendUrl ? (
<span className="toolbar__backend">Live: {liveDebugUrl}</span>
) : null}
<span className="toolbar__notice">{notice}</span>
</>
) : null}
</div>
</header>
);
}