Добавить догрузку карточек автопрогонов

This commit is contained in:
dctouch 2026-05-24 13:32:17 +03:00
parent 0506def909
commit d29d885399
6 changed files with 78 additions and 30 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,8 +4,8 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NDC AI Normalizer Playground</title>
<script type="module" crossorigin src="/assets/index-9w9i5XPJ.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DW_SonhM.css">
<script type="module" crossorigin src="/assets/index-BdTHVNKv.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D-Jp8Dx0.css">
</head>
<body>
<div id="root"></div>

View File

@ -161,6 +161,8 @@ const LIVE_RUN_ID_PREFIX = "__live__:";
const AUTORUNS_UI_CONFIG_KEY = "ndc_autoruns_ui_config_v1";
const AUTORUNS_SAVE_EVENT = "ndc-autoruns-save";
const AUTOGEN_HISTORY_FETCH_LIMIT = 180;
const AUTOGEN_HISTORY_CARD_BATCH_SIZE = 30;
const ASSISTANT_STAGES = ["Анализ запроса", "Получение данных", "Подготовка ответа"];
function buildAssistantLiveFollowupMessage(inputValue: string, selectedChip: AssistantSelectionChip | null): string {
@ -710,6 +712,7 @@ export function AutoRunsHistoryPanel({
const [autogenPersonalities, setAutogenPersonalities] = useState<AutoGenPersonalityDefinition[]>(AUTOGEN_PERSONALITIES);
const [autoGenSettings, setAutoGenSettings] = useState<AutoGenSettingsState>(DEFAULT_AUTOGEN_SETTINGS);
const [autoGenHistory, setAutoGenHistory] = useState<AutoGenHistoryRecord[]>([]);
const [autogenHistoryVisibleLimit, setAutogenHistoryVisibleLimit] = useState(AUTOGEN_HISTORY_CARD_BATCH_SIZE);
const [selectedAutogenGenerationId, setSelectedAutogenGenerationId] = useState("");
const [expandedSavedSessionGenerationId, setExpandedSavedSessionGenerationId] = useState("");
const [editableGeneratedQuestions, setEditableGeneratedQuestions] = useState<string[]>([]);
@ -806,6 +809,11 @@ export function AutoRunsHistoryPanel({
() => autoGenHistory.filter((item) => item.mode === autoGenSettings.mode),
[autoGenHistory, autoGenSettings.mode]
);
const renderedAutoGenHistory = useMemo(
() => visibleAutoGenHistory.slice(0, autogenHistoryVisibleLimit),
[autogenHistoryVisibleLimit, visibleAutoGenHistory]
);
const hiddenAutoGenHistoryCount = Math.max(0, visibleAutoGenHistory.length - renderedAutoGenHistory.length);
const selectedAutogenGeneration = useMemo(
() => visibleAutoGenHistory.find((item) => item.generation_id === selectedAutogenGenerationId) ?? visibleAutoGenHistory[0] ?? null,
[selectedAutogenGenerationId, visibleAutoGenHistory]
@ -1291,8 +1299,9 @@ export function AutoRunsHistoryPanel({
const loadAutoGenHistory = useCallback(async () => {
setAutogenHistoryBusy(true);
try {
const payload = await apiClient.loadAutoRunAutogenHistory({ limit: 180 });
const payload = await apiClient.loadAutoRunAutogenHistory({ limit: AUTOGEN_HISTORY_FETCH_LIMIT });
setAutoGenHistory(payload.items);
setAutogenHistoryVisibleLimit(AUTOGEN_HISTORY_CARD_BATCH_SIZE);
} catch (error) {
log(`Autogen history load error: ${error instanceof Error ? error.message : String(error)}`);
} finally {
@ -2310,6 +2319,17 @@ export function AutoRunsHistoryPanel({
});
}, [visibleAutoGenHistory]);
useEffect(() => {
setAutogenHistoryVisibleLimit(AUTOGEN_HISTORY_CARD_BATCH_SIZE);
}, [autoGenSettings.mode]);
useEffect(() => {
if (!selectedAutogenGenerationId) return;
const selectedIndex = visibleAutoGenHistory.findIndex((item) => item.generation_id === selectedAutogenGenerationId);
if (selectedIndex < 0) return;
setAutogenHistoryVisibleLimit((prev) => Math.max(prev, Math.min(visibleAutoGenHistory.length, selectedIndex + 1)));
}, [selectedAutogenGenerationId, visibleAutoGenHistory]);
useEffect(() => {
if (!selectedAutogenGeneration) {
setEditableGeneratedQuestions([]);
@ -3094,7 +3114,7 @@ export function AutoRunsHistoryPanel({
{isSavedUserSessionsMode ? "Сохраненные пользовательские сессии пока пусты." : "История автогенераций пока пустая."}
</p>
) : null}
{visibleAutoGenHistory.slice(0, 30).map((item) => {
{renderedAutoGenHistory.map((item) => {
const isRunningThisGeneration = autogenRunBusy && runningAutogenGenerationId === item.generation_id;
const isAnotherGenerationRunning = autogenRunBusy && runningAutogenGenerationId !== item.generation_id;
return (
@ -3344,6 +3364,19 @@ export function AutoRunsHistoryPanel({
</article>
);
})}
{hiddenAutoGenHistoryCount > 0 ? (
<button
type="button"
className="autoruns-autogen-load-more-btn"
onClick={() =>
setAutogenHistoryVisibleLimit((prev) =>
Math.min(prev + AUTOGEN_HISTORY_CARD_BATCH_SIZE, visibleAutoGenHistory.length)
)
}
>
Показать еще {Math.min(AUTOGEN_HISTORY_CARD_BATCH_SIZE, hiddenAutoGenHistoryCount)} из {hiddenAutoGenHistoryCount}
</button>
) : null}
</div>
) : null}

View File

@ -1522,6 +1522,21 @@ button:disabled {
padding-right: 2px;
}
.autoruns-autogen-load-more-btn {
border: 1px solid rgba(var(--rgb-active), 0.32);
border-radius: 10px;
background: rgba(var(--rgb-active), 0.1);
color: rgb(var(--rgb-text-main));
padding: 8px 10px;
font-size: 0.78rem;
font-weight: 700;
}
.autoruns-autogen-load-more-btn:hover {
background: rgba(var(--rgb-active), 0.18);
border-color: rgba(var(--rgb-active), 0.5);
}
.autoruns-autogen-item {
border: none;
border-radius: 10px;