Files
coze-studio/frontend/packages/project-ide/main/src/hooks/use-project-info.ts
T
zgene 6bed393c12
Backend Tests / backend-unit-test (push) Has been cancelled
Backend Tests / benchmark-test (push) Has been cancelled
CI@main / Node.js v22 (ubuntu-latest) (push) Has been cancelled
Thrift Syntax Validation / validate-thrift (push) Has been cancelled
License Check / License Check (push) Has been cancelled
first commit
2026-05-14 13:29:56 +08:00

78 lines
2.6 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 { useEffect, useState } from 'react';
import {
type User,
type IntelligenceBasicInfo,
type IntelligencePublishInfo,
} from '@coze-arch/idl/intelligence_api';
import { type ProjectFormValues } from '@coze-studio/project-entity-adapter';
import { useIDEService, useIDEGlobalStore } from '@coze-project-ide/framework';
import { ProjectInfoService } from '../plugins/create-app-plugin/project-info-service';
export const useProjectInfo = () => {
const projectInfoService =
useIDEService<ProjectInfoService>(ProjectInfoService);
const [loading, setLoading] = useState(true);
const [projectInfo, setProjectInfo] = useState<
IntelligenceBasicInfo | undefined
>(projectInfoService.projectInfo?.projectInfo);
const [publishInfo, setPublishInfo] = useState<
IntelligencePublishInfo | undefined
>(projectInfoService?.projectInfo?.publishInfo);
const [ownerInfo, setOwnerInfo] = useState<User | undefined>(
projectInfoService?.projectInfo?.ownerInfo,
);
const [initialValue, setInitialValue] = useState<ProjectFormValues>(
projectInfoService.initialValue,
);
const { patch } = useIDEGlobalStore(store => ({
patch: store.patch,
}));
useEffect(() => {
if (projectInfoService.projectInfo) {
setLoading(false);
}
patch({ projectInfo: { projectInfo, publishInfo, ownerInfo } });
const projectDisposable = projectInfoService.onProjectInfoUpdated(() => {
setLoading(false);
setProjectInfo(projectInfoService.projectInfo?.projectInfo);
setPublishInfo(projectInfoService.projectInfo?.publishInfo);
setOwnerInfo(projectInfoService.projectInfo?.ownerInfo);
patch({ projectInfo: projectInfoService.projectInfo });
setInitialValue(projectInfoService.initialValue);
});
return () => {
projectDisposable?.dispose?.();
};
}, []);
return {
loading,
initialValue,
projectInfo,
ownerInfo,
publishInfo,
updateProjectInfo:
projectInfoService.updateProjectInfo.bind(projectInfoService),
};
};