Files
coze-studio/frontend/packages/project-ide/biz-data/src/hooks/use-database-resource.tsx

167 lines
5.0 KiB
TypeScript

/*
* 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 ReactNode, useCallback } from 'react';
import {
type ResourceFolderProps,
type ResourceType,
useProjectId,
useSpaceId,
useIDENavigate,
} from '@coze-project-ide/framework';
import {
BizResourceContextMenuBtnType,
type BizResourceType,
BizResourceTypeEnum,
type ResourceFolderCozeProps,
// useOpenResource,
usePrimarySidebarStore,
} from '@coze-project-ide/biz-components';
import { useLibraryCreateDatabaseModal } from '@coze-data/database-v2';
import { I18n } from '@coze-arch/i18n';
import { ResourceCopyScene } from '@coze-arch/bot-api/plugin_develop';
import { MemoryApi } from '@coze-arch/bot-api';
import { Toast } from '@coze-arch/coze-design';
import { useResourceOperation } from './use-resource-operation';
// import { useImportLibraryDatabase } from './use-import-library-database';
type UseDatabaseResourceReturn = Pick<
ResourceFolderCozeProps,
| 'onCustomCreate'
| 'onDelete'
| 'onChangeName'
| 'onAction'
| 'createResourceConfig'
| 'iconRender'
> & { modals: ReactNode };
const useDatabaseResource = (): UseDatabaseResourceReturn => {
const refetch = usePrimarySidebarStore(state => state.refetch);
const spaceId = useSpaceId();
const projectId = useProjectId();
const IDENav = useIDENavigate();
// const openResource = useOpenResource();
// Create Database
const {
modal: createDatabaseModal,
open: openCreateDatabaseModal,
close: closeCreateDatabaseModal,
} = useLibraryCreateDatabaseModal({
projectID: projectId,
enterFrom: 'project',
onFinish: databaseID => {
refetch();
closeCreateDatabaseModal();
IDENav(`/database/${databaseID}?page_modal=normal&from=create`);
},
});
const onCustomCreate: ResourceFolderCozeProps['onCustomCreate'] = (
resourceType,
subType,
) => {
console.log('[ResourceFolder]on custom create>>>', resourceType, subType);
openCreateDatabaseModal();
};
const onChangeName: ResourceFolderProps['onChangeName'] =
async changeNameEvent => {
try {
console.log('[ResourceFolder]on change name>>>', changeNameEvent);
const resp = await MemoryApi.UpdateDatabase({
id: changeNameEvent.id,
table_name: changeNameEvent.name,
});
console.log('[ResourceFolder]rename database response>>>', resp);
} catch (e) {
console.log('[ResourceFolder]rename database error>>>', e);
} finally {
refetch();
}
};
const onDelete = useCallback(
async (resources: ResourceType[]) => {
try {
console.log('[ResourceFolder]on delete>>>', resources);
const resp = await MemoryApi.DeleteDatabase({
id: resources.filter(
r => r.type === BizResourceTypeEnum.Database,
)?.[0].res_id,
});
Toast.success(I18n.t('Delete_success'));
refetch();
console.log('[ResourceFolder]delete database response>>>', resp);
} catch (e) {
console.log('[ResourceFolder]delete database error>>>', e);
Toast.error(I18n.t('Delete_failed'));
}
},
[refetch, spaceId],
);
// const { modal: databaseModal, importLibrary } = useImportLibraryDatabase({
// projectId,
// });
const resourceOperation = useResourceOperation({ projectId });
const onAction = (
action: BizResourceContextMenuBtnType,
resource?: BizResourceType,
) => {
console.log('on action>>>', action, resource);
switch (action) {
case BizResourceContextMenuBtnType.ImportLibraryResource:
// return importLibrary();
// return openDatabase();
return;
case BizResourceContextMenuBtnType.DuplicateResource:
return resourceOperation({
scene: ResourceCopyScene.CopyProjectResource,
resource,
});
case BizResourceContextMenuBtnType.MoveToLibrary:
return resourceOperation({
scene: ResourceCopyScene.MoveResourceToLibrary,
resource,
});
case BizResourceContextMenuBtnType.CopyToLibrary:
return resourceOperation({
scene: ResourceCopyScene.CopyResourceToLibrary,
resource,
});
default:
console.warn('[DatabaseResource]unsupported action>>>', action);
break;
}
};
return {
onChangeName,
onAction,
onDelete,
onCustomCreate,
// createResourceConfig,
modals: [createDatabaseModal],
};
};
export default useDatabaseResource;