feat: manually mirror opencoze's code from bytedance
Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
/* stylelint-disable declaration-no-important */
|
||||
.create-knowledge-modal {
|
||||
:global {
|
||||
.semi-modal-content {
|
||||
max-height: calc(100vh - 100px) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.import-unit-type-label {
|
||||
display: block;
|
||||
|
||||
margin-bottom: 8px;
|
||||
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
|
||||
.create-form {
|
||||
:global {
|
||||
.semi-form-field {
|
||||
padding-top: 0;
|
||||
padding-bottom: 24px !important;
|
||||
}
|
||||
|
||||
.semi-form-field-label {
|
||||
margin-bottom: 0;
|
||||
padding: 0 8px 6px;
|
||||
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
line-height: 16px; /* 133.333% */
|
||||
color: var(--coz-fg-secondary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.upload-avatar-container {
|
||||
width: auto;
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { useRef, useState } from 'react';
|
||||
|
||||
import { useDataModalWithCoze } from '@coze-data/utils';
|
||||
import { useDataNavigate } from '@coze-data/knowledge-stores';
|
||||
import { UnitType } from '@coze-data/knowledge-resource-processor-core';
|
||||
import {
|
||||
CozeKnowledgeAddTypeContent,
|
||||
type CozeKnowledgeAddTypeContentFormData,
|
||||
} from '@coze-data/knowledge-modal-base/create-knowledge-modal-v2';
|
||||
import { KnowledgeE2e } from '@coze-data/e2e';
|
||||
import { I18n } from '@coze-arch/i18n';
|
||||
import { Button, Form, LoadingButton } from '@coze-arch/coze-design';
|
||||
import { useSpaceStore } from '@coze-arch/bot-studio-store';
|
||||
import { FormatType } from '@coze-arch/bot-api/memory';
|
||||
import { KnowledgeApi } from '@coze-arch/bot-api';
|
||||
|
||||
import styles from './index.module.less';
|
||||
|
||||
export interface UseCreateKnowledgeModalParams {
|
||||
projectID?: string;
|
||||
onFinish?: (datasetId: string, type: UnitType, shouldUpload: boolean) => void;
|
||||
beforeCreate?: (shouldUpload: boolean) => void;
|
||||
}
|
||||
export const useCreateKnowledgeModalV2 = (
|
||||
params: UseCreateKnowledgeModalParams = {},
|
||||
) => {
|
||||
const { onFinish, beforeCreate, projectID } = params;
|
||||
const formRef = useRef<Form<CozeKnowledgeAddTypeContentFormData>>(null);
|
||||
// 使用 useState 保证能重新渲染
|
||||
const [currentFormatType, setCurrentFormatType] = useState(FormatType.Text);
|
||||
const spaceId = useSpaceStore(store => store.getSpaceId());
|
||||
|
||||
const resourceNavigate = useDataNavigate();
|
||||
|
||||
const [unitType, setUnitType] = useState<UnitType>(UnitType.TEXT_DOC);
|
||||
|
||||
const createDataset = async () => {
|
||||
await formRef.current?.formApi.validate();
|
||||
const { dataset_id: datasetId } = await KnowledgeApi.CreateDataset({
|
||||
project_id: projectID || undefined,
|
||||
name: formRef.current?.formApi.getValue('name'),
|
||||
format_type: currentFormatType,
|
||||
description: formRef.current?.formApi.getValue('description'),
|
||||
icon_uri: formRef.current?.formApi.getValue('icon_uri')?.[0].uid,
|
||||
space_id: spaceId || undefined,
|
||||
});
|
||||
return datasetId;
|
||||
};
|
||||
|
||||
const { open, close, modal } = useDataModalWithCoze({
|
||||
title: (
|
||||
<div data-testid={KnowledgeE2e.CreateKnowledgeModalTitle}>
|
||||
{I18n.t('datasets_model_create_title')}
|
||||
</div>
|
||||
),
|
||||
centered: true,
|
||||
className: styles['create-knowledge-modal'],
|
||||
onCancel: () => {
|
||||
close();
|
||||
},
|
||||
footer: (
|
||||
<div className="flex w-full justify-end">
|
||||
<Button
|
||||
color="primary"
|
||||
onClick={() => {
|
||||
close();
|
||||
}}
|
||||
>
|
||||
{I18n.t('cancel')}
|
||||
</Button>
|
||||
<LoadingButton
|
||||
color="primary"
|
||||
onClick={async () => {
|
||||
beforeCreate?.(false);
|
||||
const datasetId = await createDataset();
|
||||
if (onFinish) {
|
||||
onFinish(datasetId || '', unitType, false);
|
||||
} else {
|
||||
resourceNavigate.toResource?.('knowledge', datasetId);
|
||||
}
|
||||
}}
|
||||
>
|
||||
{I18n.t('kl_write_108')}
|
||||
</LoadingButton>
|
||||
<LoadingButton
|
||||
data-testid={KnowledgeE2e.CreateKnowledgeModalSubmitAndImportButton}
|
||||
color="primary"
|
||||
onClick={async () => {
|
||||
beforeCreate?.(true);
|
||||
const datasetId = await createDataset();
|
||||
if (onFinish) {
|
||||
onFinish(datasetId || '', unitType, true);
|
||||
} else {
|
||||
resourceNavigate.upload?.({ type: unitType });
|
||||
}
|
||||
}}
|
||||
>
|
||||
{I18n.t('kl_write_109')}
|
||||
</LoadingButton>
|
||||
</div>
|
||||
),
|
||||
});
|
||||
|
||||
return {
|
||||
modal: modal(
|
||||
<Form<CozeKnowledgeAddTypeContentFormData>
|
||||
ref={formRef}
|
||||
showValidateIcon={false}
|
||||
className={styles['create-form']}
|
||||
>
|
||||
<CozeKnowledgeAddTypeContent
|
||||
onImportKnowledgeTypeChange={setUnitType}
|
||||
onSelectFormatTypeChange={setCurrentFormatType}
|
||||
/>
|
||||
</Form>,
|
||||
),
|
||||
open: () => {
|
||||
setCurrentFormatType(FormatType.Text);
|
||||
open();
|
||||
},
|
||||
close,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user