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,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export { useEditKnowledgeModal } from '@coze-data/knowledge-modal-base';
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export { useEditKnowledgeModal } from './edit-knowledge-modal';
|
||||
export { useKnowledgeListModal } from './knowledge-list-modal/scenes/base';
|
||||
export { useCreateKnowledgeModalV2 } from './create-knowledge-modal-v2/scenes/base';
|
||||
export {
|
||||
useKnowledgeListModalContent,
|
||||
KnowledgeListModalContent,
|
||||
} from './knowledge-list-modal/scenes/base/use-content';
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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 { type UnitType } from '@coze-data/knowledge-resource-processor-core';
|
||||
import {
|
||||
useKnowledgeListModal as useKnowledgeListModalBase,
|
||||
type UseKnowledgeListModalParams,
|
||||
} from '@coze-data/knowledge-modal-base';
|
||||
|
||||
import { useCreateKnowledgeModalV2 } from '../../../create-knowledge-modal-v2/scenes/base';
|
||||
|
||||
// 直接使用原始参数类型,不需要创建新的接口
|
||||
export const useKnowledgeListModal = (
|
||||
params: Omit<UseKnowledgeListModalParams, 'createKnowledgeModal'>,
|
||||
) => {
|
||||
const { onClickAddKnowledge, beforeCreate, projectID } = params;
|
||||
|
||||
// 创建知识库的modal
|
||||
const createKnowledgeModal = useCreateKnowledgeModalV2({
|
||||
projectID,
|
||||
onFinish: (datasetId: string, type: UnitType, shouldUpload: boolean) => {
|
||||
onClickAddKnowledge?.(datasetId, type, shouldUpload);
|
||||
createKnowledgeModal.close();
|
||||
},
|
||||
beforeCreate,
|
||||
});
|
||||
|
||||
// 将createKnowledgeModal传递给base组件
|
||||
return useKnowledgeListModalBase({
|
||||
...params,
|
||||
createKnowledgeModal,
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* 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 { type UnitType } from '@coze-data/knowledge-resource-processor-core';
|
||||
import {
|
||||
useKnowledgeListModalContent as useKnowledgeListModalContentBase,
|
||||
type DataSetModalContentProps,
|
||||
KnowledgeListModalContent as KnowledgeListModalContentBase,
|
||||
} from '@coze-data/knowledge-modal-base';
|
||||
|
||||
import { useCreateKnowledgeModalV2 } from '../../../create-knowledge-modal-v2/scenes/base';
|
||||
export const useKnowledgeListModalContent = (
|
||||
props: DataSetModalContentProps,
|
||||
) => {
|
||||
const { projectID, onClickAddKnowledge, beforeCreate } = props;
|
||||
// 创建知识库的modal
|
||||
const createKnowledgeModal = useCreateKnowledgeModalV2({
|
||||
projectID,
|
||||
onFinish: (datasetId: string, type: UnitType, shouldUpload: boolean) => {
|
||||
onClickAddKnowledge?.(datasetId, type, shouldUpload);
|
||||
createKnowledgeModal.close();
|
||||
},
|
||||
beforeCreate,
|
||||
});
|
||||
return useKnowledgeListModalContentBase({
|
||||
...props,
|
||||
createKnowledgeModal,
|
||||
});
|
||||
};
|
||||
|
||||
export const KnowledgeListModalContent = (props: DataSetModalContentProps) => {
|
||||
const { projectID, onClickAddKnowledge, beforeCreate } = props;
|
||||
// 创建知识库的modal
|
||||
const createKnowledgeModal = useCreateKnowledgeModalV2({
|
||||
projectID,
|
||||
onFinish: (datasetId: string, type: UnitType, shouldUpload: boolean) => {
|
||||
onClickAddKnowledge?.(datasetId, type, shouldUpload);
|
||||
createKnowledgeModal.close();
|
||||
},
|
||||
beforeCreate,
|
||||
});
|
||||
return (
|
||||
<KnowledgeListModalContentBase
|
||||
{...props}
|
||||
createKnowledgeModal={createKnowledgeModal}
|
||||
/>
|
||||
);
|
||||
};
|
||||
17
frontend/packages/data/knowledge/knowledge-modal-adapter/src/typings.d.ts
vendored
Normal file
17
frontend/packages/data/knowledge/knowledge-modal-adapter/src/typings.d.ts
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/// <reference types='@coze-arch/bot-typings' />
|
||||
Reference in New Issue
Block a user