Feat: Add an update button to the graph page of the dataset. (#17571)

### Summary

Feat: Add an update button to the graph page of the dataset.
This commit is contained in:
balibabu
2026-07-30 18:40:29 +08:00
committed by GitHub
parent 3f8a3dfcff
commit 5ac8d92d2e
23 changed files with 355 additions and 252 deletions

View File

@@ -0,0 +1,114 @@
import { Button } from '@/components/ui/button';
import { Modal } from '@/components/ui/modal/modal';
import { GenerateType, GenerateTypeMap } from '@/constants/knowledge';
import { useUnBindTask } from '@/hooks/use-dataset-generate';
import { cn } from '@/lib/utils';
import { formatDate } from '@/utils/date';
import { lowerFirst } from 'lodash';
import { Trash2 } from 'lucide-react';
import { useTranslation } from 'react-i18next';
export type IGenerateLogButtonProps = {
finish_at: string;
task_id: string;
};
export type IGenerateLogProps = IGenerateLogButtonProps & {
id?: string;
status: 0 | 1;
message?: string;
created_at?: string;
updated_at?: string;
type?: GenerateType;
className?: string;
onDelete?: () => void;
};
export function GenerateLogButton(props: IGenerateLogProps) {
const { t } = useTranslation();
const { message, finish_at, type, onDelete } = props;
const { handleUnbindTask } = useUnBindTask();
const handleDeleteFunc = async () => {
const data = await handleUnbindTask({
type: GenerateTypeMap[type as GenerateType],
});
Modal.destroy();
if (data.code === 0) {
onDelete?.();
}
};
const typeLabel = type
? t(`knowledgeDetails.${lowerFirst(type)}`)
: t('knowledgeDetails.raptor');
const handleDelete = () => {
Modal.show({
visible: true,
className: '!w-[560px]',
title: t('common.delete') + ' ' + typeLabel,
children: (
<div
className="text-sm text-text-secondary"
dangerouslySetInnerHTML={{
__html: t('knowledgeConfiguration.deleteGenerateModalContent', {
type: typeLabel,
}),
}}
></div>
),
onVisibleChange: () => {
Modal.destroy();
},
footer: (
<div className="flex justify-end gap-2">
<Button
type="button"
variant={'outline'}
onClick={() => Modal.destroy()}
>
{t('dataflowParser.changeStepModalCancelText')}
</Button>
<Button
type="button"
variant={'secondary'}
className="!bg-state-error text-text-primary"
onClick={() => {
handleDeleteFunc();
}}
>
{t('common.delete')}
</Button>
</div>
),
});
};
return (
<div
className={cn('flex bg-bg-card rounded-md py-1 px-3', props.className)}
>
<div className="flex items-center justify-between w-full">
{finish_at && (
<>
<div>
{message || t('knowledgeDetails.generatedOn')}
{formatDate(finish_at)}
</div>
<Trash2
size={14}
className="cursor-pointer"
onClick={(e) => {
handleDelete();
e.stopPropagation();
}}
/>
</>
)}
{!finish_at && <div>{t('knowledgeDetails.notGenerated')}</div>}
</div>
</div>
);
}

View File

@@ -1,19 +1,18 @@
import { FormLayout } from '@/constants/form';
import { DocumentParserType } from '@/constants/knowledge';
import { DocumentParserType, GenerateType } from '@/constants/knowledge';
import { useTranslate } from '@/hooks/common-hooks';
import { cn } from '@/lib/utils';
import { useKnowledgeBaseContext } from '@/pages/dataset/contexts/knowledge-base-context';
import { LLMModelItem } from '@/pages/dataset/dataset-setting/configuration/common-item';
import { GenerateType } from '@/pages/dataset/dataset/generate-button/constants';
import {
GenerateLogButton,
IGenerateLogButtonProps,
} from '@/pages/dataset/dataset/generate-button/generate-log-button';
import { upperFirst } from 'lodash';
import { useCallback, useMemo } from 'react';
import { useFormContext, useWatch } from 'react-hook-form';
import { EntityTypesFormField } from '../entity-types-form-field';
import { FormContainer } from '../form-container';
import {
GenerateLogButton,
IGenerateLogButtonProps,
} from '../generate-log-button';
import { SliderInputFormField } from '../slider-input-form-field';
import {
FormControl,

View File

@@ -1,15 +1,14 @@
import { FormLayout } from '@/constants/form';
import { DocumentParserType } from '@/constants/knowledge';
import { DocumentParserType, GenerateType } from '@/constants/knowledge';
import { useTranslate } from '@/hooks/common-hooks';
import { GenerateType } from '@/pages/dataset/dataset/generate-button/constants';
import {
GenerateLogButton,
IGenerateLogButtonProps,
} from '@/pages/dataset/dataset/generate-button/generate-log-button';
import random from 'lodash/random';
import { Shuffle } from 'lucide-react';
import { useCallback, useEffect, useMemo } from 'react';
import { useFormContext, useWatch } from 'react-hook-form';
import {
GenerateLogButton,
IGenerateLogButtonProps,
} from '../generate-log-button';
import { SliderInputFormField } from '../slider-input-form-field';
import {
FormControl,